【javascript】高级js--(面向对象js,arguments,闭包,自调)

i < 3; i++){

  a[i] = function(){//a[i]是一个闭包

  return i;

}

  }

  return a;

  }

 

  var fun = f();

 

  alert(fun[0]());  //output  3

  alert(fun[1]());  //output  3

  alert(fun[2]());  //output  3

补充说明:

l按照预期,最终结果应该输出 [0 , 1 , 2 ],但是却是[ 3 , 3 , 3 ]
l在函数 f ( ) 中,我们通过循环,创建了三个闭包,它们都指向了共同的局部变量 i 
l但是闭包并不会记录它们的值,它们所拥有的只是一个 i 的连接(即引用),因此只能返回i 的当前值。
例如2:(对比例1)

function f(){

  var a = [];

  var i;

  for(i = 0; i < 3; i++){

  a[i] = (function(x){

  return x;

  })(i);

  }

  return a;

}

 

var fun = f();

 

alert(fun[0]);  //output  0

alert(fun[1]);  //output  1

alert(fun[2]);  //output  2

补充说明:

l在这里,我们不再直接创建一个返回i 的函数,而是将i 传递给了一个自调函数。
l在该自调函数中,i 就被赋值给了局部变量,这样一来,每次迭代中的就会拥有各自不同的值了
例如3:下 面这种,是不使用自调函数的用法。

function f(){

  function n(x){

  return x;

}

  var a = [];

  var i;

  for(i = 0; i < 3; i++){

  a[i] = n(i);

  }

  return a;

}

 

  var fun = f();

 

  alert(fun[0]);  //output  0

  alert(fun[1]);  //output  1

  alert(fun[2]);  //output  2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值