08--闭包,arguments对象,Function对象

  1. 闭包
    闭包是指函数可以使用函数之外定义的变量。

    1. 简单的闭包
      在 JavaScript 中,使用全局变量是一个简单的闭包实例。比如:
      var num = 3;
      function foo(){
      console.log(num);
      }
      foo(); //打印 3

    2. 复杂的闭包
      function f1(){
      var num1 = 6;
      function f2(){
      var num2 = 7;
      }
      console.log(num1 + num2);
      }
      f1();

      在上述代码中函数 f2 能够访问到它外层的变量 num,但是 f1 是不能访问 f2 中的变量的,因此我们可以把 num2 作为 f2 的返回值,再把 f2 作为返回值就可以访问到了。
      function f1(){
      var num1 = 6;
      function f2(){
      var num2 = 7;
      return num2;
      }
      return f2();
      console.log(num1 + num2);
      }
      f1()

  2. arguments对象 实参列表
    在函数代码中,使用特殊对象 arguments,无需明确指出参数名,我们就能访问它们。第一个参数是 arguments[0],第二个参数是 arguments[1],以此类推。比如:
    function foo() {
    console.log(arguments[0]);
    console.log(arguments[1]);
    }
    foo(2,3);//打印 2 3
    还可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length 即可。来看一个遍历参数求和的例子:
    function add() {
    var sum =0;
    for(var i=0; i<arguments.length; i++){
    sum += arguments[i];
    }
    return sum;
    }
    add(); // 0
    add(1); // 1
    add(1,2); // 3
    add(1,2,3); // 6

  3. Function对象

    1)用 Function 对象创建函数的语法如下:
    var function_name = new Function(arg1, arg2, …, argN, function_body)
    注:每个参数都必须是字符串,function_body 是函数主体,也就是要执行的代码。
    例子:
    var add = new Function(“a”,“b”,“console.log(a+b);”);
    add(2,5); //打印7

    再看一个例子:
    var add = new Function(“a”,“b”,“console.log(a+b);”);
    var doAdd = add;
    doAdd(2,5); // 打印7
    add(2,5); // 打印7
    在上述例子中,变量 add 被定义为函数,然后 doAdd 被声明为指向同一个函数的指针。用这两个变量都可以执行该函数的代码,并输出相同的结果。因此,函数名只是指向函数的变量,那么我们可以把函数作为参数传递给另一个函数,比如下面的例子:
    function addF(foo,b,c){
    foo(b,c);
    }
    var add = new Function(“a”,“b”,“console.log(a+b);”);
    addF(add,2,5); // 打印7

    2)Function 对象的 length 属性
    函数属于引用类型,所以它们也有属性和方法。length 属性声明了函数期望的参数个数。
    例子:
    var add = new Function(“a”,“b”,“console.log(a+b);”);
    console.log(add.length); // 打印2

    3)Function 对象的方法
    Function 对象也有与所有对象共享的 valueOf() 方法和 toString() 方法。这两个方法返回的都是函数的源代码。
    例子:
    var add = new Function(“a”,“b”,“console.log(a+b);”);
    add.valueOf();
    add.toString();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值