negating self invoking function? !function ($) { … }(window.jQuery);
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
What does the exclamation mark do before the function?
我在查看Twitter引导程序的javascript代码,发现他们所有的插件都被封装在否定自调用函数中。
我知道
但是,
1)如果您只是这样做:
1 | function () { /* ... */ }(); |
你会得到一个错误。JS不允许您触发一个函数声明(因为"变量提升"的概念,这在技术上是不正确的,但是对于很多人来说更容易思考)。如果使用声明函数:
1 | function myFunc () { /* ... */ } |
JS引擎将在您所在的范围内创建它们,然后再创建范围的变量——即使变量都在顶部,函数都在底部。
所以当你写:
1 | function myFunc () { /* ... */ }(); |
这里有一个错误,因为当前作用域中甚至不存在的var可能在内部调用,这是一个保证崩溃的过程。
为了进一步说明这一点,如果不给函数声明命名:
1 | function () { /* ... */ } |
…不管怎么说,这里有一个错误,因为你还不能调用函数,但是你无法获取它,因为它没有名称,而且你没有将它赋给变量。
像
1 | +function () { /* ... */ }(); |
只要没有变量在监听返回语句,就可以了。
2)另外,在
…所以如果你真的,真的想要,你可以做如下的事情:
1 2 | var success = !function () { /* ... */ }(); if (success) { doStuff(); } |