匿名函数的写法之疑惑

moliu 2009-10-27 10:22:14
写法一:
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


...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zengtan1021 2009-11-03
  • 打赏
  • 举报
回复
var a = function (){

}()
引擎分析为 var a = function(){}; //--第一步
a(); //--第二步


function a(){

}()
分析为 function a(){}; //--第一步
() //--第二步, 语法错误!!

所以要让编译通过, 只要把匿名函数作为表达式申明就可以了.

比如~function(){}() // ~function(){}为一个对匿名函数返回值取反减一的表达式

第一次回这么多哈!
zengtan1021 2009-11-03
  • 打赏
  • 举报
回复
顺利通过语法编译期, 比如
var a = function (){

}() 可以

function a(){

}()和

function(){
}()都不可以.

周爱民的书讲的很详细,想真正搞懂js,推荐人手一册 :)

zengtan1021 2009-11-03
  • 打赏
  • 举报
回复
第一个括号理论上是的. 不过你要保证它顺利通过语法编译期.
moliu 2009-11-02
  • 打赏
  • 举报
回复
写匿名函数写,有没有括号,都可以是吗
moliu 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kingwolf_javascript 的回复:]
错误原因不在于括号,因为你的第一个函数没有传参数进去,所以都是undefined
[/Quote]
匿名函数写法,有没有括号,都可以是吗?我验证代码,发现有无括号都一样。请确认下,谢谢。
moliu 2009-10-28
  • 打赏
  • 举报
回复
谢谢指教。a[i] = (function(i){
return function(){
alert(i);
return i;
}
})();
我以为在定义中写一下 i ,参数就自动传进去了呢!
浴火_凤凰 2009-10-28
  • 打赏
  • 举报
回复
错误原因不在于括号,因为你的第一个函数没有传参数进去,所以都是undefined

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧