javascript 中!function(){} 方法前面一个分号是啥意思

2014-09-04 16:23:45 +08:00
 frontman
经常在框架中看到 !function(){} 这样的表达式 不明觉厉 不知其意
15295 次点击
所在节点    程序员
34 条回复
Zhang
2014-09-04 16:26:49 +08:00
javascript里函数就是一个object,函数前面加!就表示“空object”吧。
subpo
2014-09-04 16:29:09 +08:00
+function !function === (function(){})()
subpo
2014-09-04 16:30:31 +08:00
原理是加一个运算符会实时触发这个函数,不过我记得~function已经加到ES6了?依稀有这么印象
ZhaoMiing
2014-09-04 16:32:19 +08:00
54c3
2014-09-04 16:33:23 +08:00
這又是 javascript 的 trick,假如有個匿名函數`function(){ console.log('yooo'); }`,要調用它一般用`(function(){ console.log('yooo'); })()`,js 解釋器碰到一開始的左括號就會把後面解釋為一個表達式。而`function(){ console.log('yooo'); }()`卻會語法錯誤,因為 js 解釋器看到 function 自動默認為函數定義了。這時可以用`!function(){ console.log('yooo'); }()`,前面的「!」會指引解釋器告訴它後面是一個表達式,所以效果和用括號括住匿名函數定義一樣,但是省一個字符。
Zhang
2014-09-04 16:35:06 +08:00
我能删除我的回复么?
NemoAlex
2014-09-04 16:35:49 +08:00
标题说的分号原来是叹号啊
ZhaoMiing
2014-09-04 16:36:56 +08:00
分号是为了避免跟其他文件压缩合并是出现错误。
feiyuanqiu
2014-09-04 16:41:26 +08:00
@Zhang haha
所以回复的时候要认真思考一下呢...
Zhang
2014-09-04 16:51:59 +08:00
@feiyuanqiu 刚学javascript,因为觉得这货很有用,虽然很tricky,也不优雅,也不严谨。
tsingchao
2014-09-04 17:35:36 +08:00
function(){} 函数声明 函数名称为必须
!function(){} = (function(){}) 函数表达式 函数名称可选
tushiner
2014-09-04 18:01:06 +08:00
一楼最亮,哈哈
tushiner
2014-09-04 18:03:57 +08:00
又长姿势了。给出正解的都是大神。
AsterOcclu
2014-09-04 18:41:47 +08:00
推荐看看http://swordair.com/function-and-exclamation-mark/ 这篇文章,下面还有明确的性能评测~
shoumu
2014-09-04 18:59:18 +08:00
今天也想到了这个问题。。
zythum
2014-09-04 19:08:52 +08:00
@subpo
应该说所有符号~function 的效率是最快的...
54c3
2014-09-04 19:41:34 +08:00
@zythum 唔…為什麼我覺得好喪病…
digimoon
2014-09-04 19:59:24 +08:00
@54c3 能解释一下(function(){})()这种是什么意思么新手不懂,或者找资料的话这种名字是叫什么?
xiandao7997
2014-09-04 20:13:17 +08:00
@digimoon 前面一个圆括号里创建了一个匿名函数,最后面一个圆括号表示立即执行它
应该是叫即时匿名函数吧,可以翻翻《JavaScript 高级程序设计》
jarontai
2014-09-04 20:14:36 +08:00
@digimoon 这是js里有名的IIFE(立即执行函数表达式),常用来创建一个匿名的命名空间,避免污染顶(上)层空间

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/131730

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX