否定自我调用功能? !函数($){...}(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(){}()