请教:这样写函数并直接调用有什么好处?(function(){alert('hi');})();

eduyu 2009-03-15 09:01:46
看到jquery等很多js库都有这样的语法,这个语法有点怪异,第一对()符号是干嘛的,怎么理解?
...全文
214 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
l449298693 2011-11-29
  • 打赏
  • 举报
回复
学习学习。很给力哦!
eduyu 2009-03-19
  • 打赏
  • 举报
回复
function(){};//function literal
(function(){})();//call the function literal

谢谢各位帅哥
xiongzhijian 2009-03-16
  • 打赏
  • 举报
回复
匿名函数罢了,目的是完成初始化,减少命名空间,设置私有属性,减少全局变量.
王集鹄 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 eduyu 的回复:]
谢谢

1.可以随意的return, 要是直接写在script标签中,则不能。
-----
这点不大理解。

[/Quote]即这样是无效的:

<script type="text/javascript">
alert(1);
return; // <<<<<<<<<<
alert(2);
</script>


另外可以声明局部变量,而减少内存垃圾。
<script type="text/javascript">
(function() {
var i = 3;
var j = 7;
alert(i * j);
})();
alert(typeof i); // undefined // 未成为全局变量
</script>

<script type="text/javascript">
var i = 3;
var j = 7;
alert(i * j);
alert(typeof i); // number
</script>

luojihaidao 2009-03-16
  • 打赏
  • 举报
回复
为执行函数!
gengzhw 2009-03-16
  • 打赏
  • 举报
回复
(function(){alert('hi');})();

等价于 var func = function(){alert('hi');};func();

(function(){alert('hi');}) 应该就是 func 了,先定义,再引用。
如果没有 “function(){alert('hi');}” 外面的(),js语法通不过。
eduyu 2009-03-16
  • 打赏
  • 举报
回复
谢谢

1.可以随意的return, 要是直接写在script标签中,则不能。
-----
这点不大理解。

function() 相当于一个匿名函数,加()后就调用了它。
-----
第三对()应该是调用我理解的,我是说第一对(),就是把匿名函数包括在内的那一对(function(){...}),这个语法很怪异,不知道哪儿有介绍。

关于闭包,我想不能说local的函数都是吧,至少还有第二个条件,就是引用了父函数的局部变量,这里应该不存在闭包,但是我也不是特别确定。
TeaBall 2009-03-15
  • 打赏
  • 举报
回复
这和jQuery无关吧,JS的语法本身就是这样,匿名函数来的,其他语言里面也有很多类似的做法。
有些代码只需要在特定的地方执行一次就行,又不需要反复调用,甚至连想函数名称的精力都可以省下来……
niuxinlong 2009-03-15
  • 打赏
  • 举报
回复
呵呵初学jquery,学习了
tantaiyizu 2009-03-15
  • 打赏
  • 举报
回复
function() 相当于一个匿名函数,加()后就调用了它。

这就是闭包的一个应用。

好处有:
1.可以随意的return, 要是直接写在script标签中,则不能。
2.不会增加额外的命名空间。
3.看起来也很干净,把代码都放到一个函数包去执行,不是散落在各地。

请各位继续补充。。。

http://www.scriptlover.com/controls/

87,917

社区成员

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

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