否定自我调用功能? !函数($){...}(window.jQuery);
可能重复:
该功能之前感叹号做了什么?
我正在浏览Twitter Bootstrap JavaScript代码,我注意到他们的所有插件都被封装在否定自我调用函数中。
我知道function ($) { ... }(window.jQuery);
立即调用该函数。
但是,这是什么!
对于?
1)如果你只是这样做:
function () { /* ... */ }();
你会得到一个错误。
JS不允许你发布一个函数声明(因为“变量提升”的概念,这在技术上是不正确的,但对于很多人来说要容易得多)。
如果您使用声明性函数:
function myFunc () { /* ... */ }
在创建范围的变量之前,JS引擎会在您所在的范围内创建它们 - 即使变量都在顶部,而函数都在底部。
所以,当你写:
function myFunc () { /* ... */ }();
这里有一个错误,因为在当前范围内甚至不存在的变量可能会在内部调用,这是一个有保证的崩溃。
为了进一步说明,如果你不给你的函数声明一个名字:
function () { /* ... */ }
...不管怎么说,这里都有一个错误,因为你不能调用这个函数,但是你没有办法去处理它,因为它没有名字,而且你也没有把它分配给一个变量。
运营商喜欢()
或+
或!
- 任何会迫使引擎评估接下来的内容的东西,将允许你触发这样的功能:
+function () { /* ... */ }();
只要没有变量监听返回语句,就没问题。
2)另外,在!function () { /*...*/ }();
,如果该函数自然没有return语句,那么它将返回undefined
。
undefined
的相反true
在以这种方式被强制时是true
...
...所以如果你真的,真的想要,你可以做一些事情:
var success = !function () { /* ... */ }();
if (success) { doStuff(); }
链接地址: http://www.djcxy.com/p/96901.html
上一篇: negating self invoking function? !function ($) { ... }(window.jQuery);
下一篇: What's the difference between function(){}() and !function(){}()