写法一:
function f() {
var a = [];
var i;
for(i = 0; i < 3; i++) {
a[i] = (function(i){
return function(){
alert(i);
return i;
}
})();
}
return a;
}
var a = f();
a[0]();//undefined
a[1]();//undefined
a[2]();//undefined 上面这种匿名函数的写法,正确吗?我觉得与下面的写法没有区别啊?
写法二 和 写法三 只差别在有无 ( ) 上,没括号的是正确写法吗?
写法二:function f() {
var a = [];
var i;
for(i = 0; i < 3; i++) {
a[i] = (function(x){
return function(){
alert(x);
return x;
}
})(i);
}
return a;
}
var a = f();
a[0]();//0
a[1]();//1
a[2]();//2
写法三:function f() {
var a = [];
var i;
for(i = 0; i < 3; i++) {
a[i] = function(x){
return function(){
alert(x);
return x;
}
}(i);
}
return a;
}
var a = f();
a[0]();//0
a[1]();//1
a[2]();//2
function f() {
var a = [];
var i;
for(i = 0; i < 3; i++) {
a[i] = (function(i){
return function(){
alert(i);
return i;
}
})();
}
return a;
}
var a = f();
a[0]();//undefined
a[1]();//undefined
a[2]();//undefined 上面这种匿名函数的写法,正确吗?我觉得与下面的写法没有区别啊?
写法二 和 写法三 只差别在有无 ( ) 上,没括号的是正确写法吗?
写法二:function f() {
var a = [];
var i;
for(i = 0; i < 3; i++) {
a[i] = (function(x){
return function(){
alert(x);
return x;
}
})(i);
}
return a;
}
var a = f();
a[0]();//0
a[1]();//1
a[2]();//2
写法三:function f() {
var a = [];
var i;
for(i = 0; i < 3; i++) {
a[i] = function(x){
return function(){
alert(x);
return x;
}
}(i);
}
return a;
}
var a = f();
a[0]();//0
a[1]();//1
a[2]();//2
return function(){
alert(i);
return i;
}
})();
我以为在定义中写一下 i ,参数就自动传进去了呢!
var a = function (){
}() 可以function a(){}()和function(){
}()都不可以.周爱民的书讲的很详细,想真正搞懂js,推荐人手一册 :)
}()
引擎分析为 var a = function(){}; //--第一步
a(); //--第二步
function a(){ }()
分析为 function a(){}; //--第一步
() //--第二步, 语法错误!!所以要让编译通过, 只要把匿名函数作为表达式申明就可以了.比如~function(){}() // ~function(){}为一个对匿名函数返回值取反减一的表达式 第一次回这么多哈!