匿名函数括号问题

snailxr 2011-10-12 01:51:19

(function (a){
return function(){alert(a)}
})(1)

将以上代码写成:

function (a){
return function(){alert(a)}
}(1)

是不正确的
但是

function c(a,fn){fn()}
c(1,function (a){
return function(){alert(a)}
}(1));

作为参数的那个匿名函数外面的括号加不加都能正常运行,这是为什么呢??
...全文
87 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
rockyoung 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

谢谢你这么耐心
[/Quote]

人家对你答非所问,你居然也懂了。。。你再仔细看看你当初问的什么,而他回答你的又是什么
snailxr 2011-10-12
  • 打赏
  • 举报
回复
谢谢你这么耐心
liangws 2011-10-12
  • 打赏
  • 举报
回复
function c(a,fn){fn()}
c(1,function (a){
return function(){alert(a)}
}(1));

我们一步一步看

function (a){
return function(){alert(a)}
}(1)
等同于

function(){alert(1)}

所以
c(1,function (a){
return function(){alert(a)}
}(1)); ==
c(1,function (){
alert(1)
});
再看c函数
function c(a,fn){fn()}
它方法体里把fn执行了fn();
所以就等于把function (){
alert(1)
}执行了,不就会alert(1)了?
snailxr 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liangws 的回复:]

引用 5 楼 snailxr 的回复:

引用 4 楼 liangws 的回复:

()在js中是强制表达式运算

(function (a){
return function(){alert(a)}
})(1)
不用()括着的话,引擎不知道你要强制运算他
其他它等同于
(function (a){
return function(){alert(a)}
}(1))
……
[/Quote]是的
liangws 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 snailxr 的回复:]

引用 4 楼 liangws 的回复:

()在js中是强制表达式运算

(function (a){
return function(){alert(a)}
})(1)
不用()括着的话,引擎不知道你要强制运算他
其他它等同于
(function (a){
return function(){alert(a)}
}(1))

所以就可以理解function c(a,f……
[/Quote]

你的意思是
function c(a,fn){fn()}
c(1,function (a){
return function(){alert(a)}
}(1));
为什么能执行alert(a)?
snailxr 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liangws 的回复:]

()在js中是强制表达式运算

(function (a){
return function(){alert(a)}
})(1)
不用()括着的话,引擎不知道你要强制运算他
其他它等同于
(function (a){
return function(){alert(a)}
}(1))

所以就可以理解function c(a,fn){fn()}
c(1,function ……
[/Quote]


c(1,function (a){
return function(){alert(a)}
}(1));
里面的
function (a){
return function(){alert(a)}
}(1)
不是也需要执行而返回function(){alert(a)}吗?
liangws 2011-10-12
  • 打赏
  • 举报
回复
()在js中是强制表达式运算

(function (a){
return function(){alert(a)}
})(1)
不用()括着的话,引擎不知道你要强制运算他
其他它等同于
(function (a){
return function(){alert(a)}
}(1))

所以就可以理解function c(a,fn){fn()}
c(1,function (a){
return function(){alert(a)}
}(1));
为什么是正确了

峭沙 2011-10-12
  • 打赏
  • 举报
回复
(function (a){
return function(){alert(a)}
})(1)
这样写是表示定义一个匿名函数并且传入参数1,立即执行。。
snailxr 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 snailxr 的回复:]

(function (a){
return function(){alert(a)}
})(1)
a=function (a){
return function(){alert(a)}
}(1);
function c(a,fn){fn()}
c(1,a);
[/Quote]
有点意思
snailxr 2011-10-12
  • 打赏
  • 举报
回复
(function (a){
return function(){alert(a)}
})(1)
a=function (a){
return function(){alert(a)}
}(1);
function c(a,fn){fn()}
c(1,a);

87,907

社区成员

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

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