Hai*_*ood 1 javascript jquery negate twitter-bootstrap self-invoking-function
可能重复:
感叹号在功能之前做了什么?
我正在查看Twitter Bootstrap JavaScript代码,我注意到他们所有的插件都包含在否定自我调用函数中.
我知道function ($) { ... }(window.jQuery);立即调用该函数.
但是!为了什么?
1)如果你这样做:
function () { /* ... */ }();
Run Code Online (Sandbox Code Playgroud)
你会收到一个错误.
JS不会允许你发起一个函数声明(因为"变量提升"的概念,这在技术上是不正确的,但对很多人来说更容易思考).
如果使用声明性函数:
function myFunc () { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
JS引擎会在你所在的范围内创建它们,创建范围的变量之前 - 即使瓦尔都在顶部和功能都在底部.
所以当你写:
function myFunc () { /* ... */ }();
Run Code Online (Sandbox Code Playgroud)
那里有一个错误,因为当前范围内甚至不存在的变量可能会在内部调用,这是一个保证崩溃.
为了进一步说明,如果你没有给你的函数声明一个名字:
function () { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
...然后在那里有一个错误,因为你还不能调用该函数,但你无法获得它,因为它没有名称,你没有将它分配给变量.
操作员喜欢()或者- +或!任何会强制引擎评估接下来的内容的东西,将允许你触发这样的功能:
+function () { /* ... */ }();
Run Code Online (Sandbox Code Playgroud)
只要没有变量监听return语句,你就没事了.
2)此外,!function () { /*...*/ }();如果该函数自然没有返回语句,那么它将返回undefined.
相反的undefined是以true这种方式强迫......
...所以,如果你真的,真的想要,你可以这样做:
var success = !function () { /* ... */ }();
if (success) { doStuff(); }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
824 次 |
| 最近记录: |