【发布时间】:2014-07-26 21:13:13
【问题描述】:
Airbnd suggests我这样做:
!function() {
// ...
}();
因为:
这样可以确保如果格式错误的模块忘记包含 final 分号 脚本获取时生产中没有错误 串联。
bang 让我可以绕过语言的语法规则:
// Evaluated in Chromium 34 console.
function(){}(); // => SyntaxError: Unexpected token (
!function(){}(); // => true
当连接其他模块时,爆炸似乎可以解决问题:
!function(){}();function(){}(); // => SyntaxError: Unexpected token (
!function(){}();!function(){}(); // => true
(function(){}());!function(){}(); // => true
但它似乎并不真正“安全”,因为如果其他人的脚本末尾没有分号:
!function(){}()!function(){}(); // => SyntaxError: Unexpected token !
(function(){}())!function(){}(); // => SyntaxError: Unexpected token !
似乎以分号开头的 IIFE 更好。
;(function() {
// ...
}());
!function(){}();(function(){}()); // => undefined
(function(){}());(function(){}()); // => undefined
!function(){}();;(function(){}()); // => undefined
(function(){}());;(function(){}()); // => undefined
我错过了什么吗?使用 bang "!" 真的可以接受吗?函数或前导分号“;” IIFE 真正的优势在于它们的连接方式?
【问题讨论】:
标签: javascript function concatenation iife