您的位置:首页 > Web前端 > JavaScript

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

2014-03-31 14:24 344 查看
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 就被赋值给了局部变量x ,这样一来,每次迭代中的x 就会拥有各自不同的值了。

例如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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: