zoukankan      html  css  js  c++  java
  • JS(JavaScript)函数

    JavaScript函数

    今日大纲:

    一.函数

      1.函数的定义

      2.函数中的arguments的参数

      3.函数的全局变量和局部变量

      4.作用域

    二.词法分析(尝试理解)

    三.内置对象和方法

      1.自定义对象

      2.Date对象

      3.Json对象

      4.RegExp对象

      5.Math对象

    一.函数

      1.函数的定义

        1>普通定义

    function f1() {
    console.log("HelloWorld!");
    }

        2>带参数的函数定义

    function f2(a,b) {
        console.log(arguments);
        consloe.log(arguments.length);
        consloe.log(a,b);
    }

        3>代返回值的函数

    function sum (a,b){
        return a+b;
    }

        4>匿名函数的定义

    var sum = function(a,b){
        return a+b;
    }
    sum(1,2)

        5>立即执行函数

    (function(a,b){
        ruturn a+b;
    }) (1,2)

    补充:

    ES6中允许使用"箭头" (=>) 定义函数.

    var f = v => v;
    //等同于
    var f = function(v){
        return v;
    }

    如果箭头函数不需要参数或者需要多个参数,就是用括号代表参数部分:

    var f = () => 5;
    // 等同于
    var f = function () {return 5};
    
    var sum = (num1,num2) => num1+ num2;
    //等同于
    var sum = function(num1,num2){
        ruturn num1+num2
    }

      2.函数中的arguments参数

    function add (a+b){
        console.log(a+b);
        console.log(arguments.length);
    }
    add(1,2)
    
    输出结果是:
    
    3
    2

    注意:!!!!!!

        函数只能有一个返回一个值,如果要返回多个值,只能将其放在数组或对象中返回.

      3.函数的全局变量和局部变量

        局部变量 : 在JavaScript函数内部声明的变量是局部变量,所以只能在函数内部访问它.只能 函数运行结束完毕,本地变量就会被删除.

        全局变量 : 在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它.

        变量生存周期 : JavaScript变量的生命期从它们被声明的时间开始

               局部变量会在函数结束以后被删除

               全局变量会在页面关闭之后被删除

      4.作用域

        作用域法则: 首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层.

    例题1

    var city = "BeiJing";
    function f() {
      var city = "ShangHai";
      function inner(){
        var city = "ShenZhen";
        console.log(city);
      }
      inner();
    }
    
    f();  //输出结果是?
    
    ShengZhen

    例题2

    var city = "BeiJing";
    function Bar() {
      console.log(city);
    }
    function f() {
      var city = "ShangHai";
      return Bar;
    }
    var ret = f();
    ret();  // 打印结果是?
    
    BeiJing

    例题3----闭包

    var city = "BeiJing";
    function f(){
        var city = "ShangHai";
        function inner(){
            console.log(city);
        }
        return inner;
    }
    var ret = f();
    ret();
    输出结果是:

    ShangHai

    二.词法分析(尝试理解)

    JavaScript中,在调用函数的一瞬间,会先进行词法分析.

    词法分析的过程:

      当函数调用的前一瞬间,会先形成一个激活对象,Active Object (AO) 并分析以下3个方面

    1.函数参数,如果有,则将此参数赋值给AO ,且值为undefind 如果没有,则不做任何操作.

    2.函数局部变量,如果AO上有同名的值,则不做任何操作.如果没有,则将此变量赋值给AO,并且值为undefined

    3.函数声明,如果AO上有,则会将AO上的对象覆盖,如果没有,则不做任何操作

    例题1:

    var age = 18;
    function foo(){
      console.log(age);
      var age = 22;
      console.log(age);
    }
    foo();  // 问:执行foo()之后的结果是?
    
    undefined
    22

    例题2:

    var age = 18;
    function foo(){
      console.log(age);
      var age = 22;
      console.log(age);
      function age(){
        console.log("呵呵");
      }
      console.log(age);
    }
    foo();  // 执行后的结果是?

    三.内置对象和方法

      1.自定义对象

      JavaScript的对象,本质上是键值对的集合,但是只能用字符串作为键.

    var a = {"name":"ALEX","age":18};
    console.log(a.name);
    console.log(a["age"]);

      遍历对象中的内容:

    var a = {"name":"ALEX","age":18};
    for (var i in a){
        console.log(i,a[i]);
    }

    创建对象:

    var person = new Object();  // 创建一个person对象
    person.name = "ALEX";       // person对象的name属性
    person.age = 18                 // person 对象的属性

      2.Date对象

    创建Date对象

    // 方法1:不指定参数
    var d1 = new Date();
    console.log(d1.toLocaleString());
    
    // 方法2 : 参数为日期字符串
    
    var d2 = new Date("2018/9/5 11:12");
    console.log(d2.toLocaleString());
    var d3 = new Date("04/03/20 11:12");
    console.log(d3.toLocaleString());
    
    // 方法3 参数为毫秒
    var d3 = new Date(5000);
    console.log(d3.toLocaleString());
    console.log(d3.toUTCString());
    
    //方法4 : 参数为年月日小时分钟秒毫秒
    
    var d4 = new Date (2004,2 20,11,12,0,300);
    console.log(d4.toLocaleString());  //毫秒并不直接显示

    Date对象的方法:

    var d = new Date();
    //getDate()             获取日
    //getDay()              获取星期
    //getMonth()            获取月(0-11)
    //getFullYear()         获取完整年份
    //getYear()             获取年
    //getHours()            获取小时
    //getMinuters()         获取分钟
    //getSeconds()          获取秒
    //getMilliseconds       获取毫秒
    //getTime               返回累计毫秒数(从1970/1/1午夜)

      3.Json对象

    var str1 = "{"name":"ALex","age": 18}";
    var obj1 = {"name":"Alex","age":18};
    
    //序列化-----对象转换成字符串
    var str = JSON.stringify(obj1);
    
    // 反序列化 -------对象转换成对象
    var obj = JSON.parse(str1);

      4.RegExp对象

    // RegExp 对象
    
    // 创建RegExp对象方式(都逗号后面不要加空格)
    
    var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$");
    
    // 匹配响应的字符串
    
    var s1 = "bc123"
    
    //RegExp对象的test方法,测试一个字符串是否符合对应的规则,返回值是true或false
    
    reg1.test(s1);  //true
  • 相关阅读:
    socket架构
    异常处理
    类的装饰器
    with&as上下文管理协议
    软件开发规范
    面向对象-描述符
    面向对象-迭代器
    面向对象编程多种特性
    体验Visual Studio 2015 之 MVC
    MVC 好记星不如烂笔头之 ---> 全局异常捕获以及ACTION捕获
  • 原文地址:https://www.cnblogs.com/kcwxx/p/9593542.html
Copyright © 2011-2022 走看看