【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
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
相关文章推荐
- 高级js--(面向对象js,arguments,闭包,自调)
- JS高级(作业域链,闭包,面向对象)
- [Javascript 高级程序设计]学习心得记录9 js面向对象
- js面向对象、原型及继承(javaScript高级程序设计第3版)
- JavaScript面向对象(三)——继承与闭包、JS实现继承的三种方式
- js-JavaScript高级程序设计学习笔记6
- 悟透JavaScript(理解JS面向对象的好文章)
- javascript深入理解js闭包
- js设计模式学习之面向对象的javascript(三)--原型式继承
- 【转载】JavaScript: 使用面向对象的技术创建高级 Web 应用程序
- JavaScript的作用;JS常见的三种对话框;==和===的区别;函数内部参数数组arguments在函数内部打印实参;JS的误区:没有块级作用域
- [JS]学习Javascript闭包(Closure)
- javascript深入理解js闭包
- JS高级——闭包
- javascript深入理解js闭包
- javascript深入理解js闭包
- javascript深入理解js闭包
- JavaScript高级程序设计笔记-面向对象的编程
- JavaScript使用面向对象的技术创建高级 Web 应用程序
- JavaScript:使用面向对象的技术创建高级 Web 应用程序(转)