3 回答
TA贡献1836条经验 获得超3个赞
理想情况下,您应该能够完成所有这些:
function(){
// do stuff
}();
这意味着声明匿名函数并执行它。但由于JS语法的细节,这不起作用。
实现这一目标的最短形式是使用一些表达式,例如UnaryExpression(以及CallExpression):
!function(){
// do stuff
}();
或者为了好玩:
-function(){
// do stuff
}();
要么:
+function(){
// do stuff
}();
甚至:
~function(){
// do stuff
return 0;
}( );
TA贡献1890条经验 获得超9个赞
在Javascript中,一行开头应该function是一个函数语句,看起来应该是这样的
function doSomething() {
}
像一个自我调用的功能
function(){
// do stuff
}();
不符合该形式(并且会在第一个打开的paren处导致语法错误,因为没有函数名称),因此括号用于描述匿名函数表达式。
(function(){
// do stuff
})();
但是任何创建表达式的东西(与函数语句相反)都会这样做,因此!。它告诉解释器这不是函数声明。除此之外,运算符优先级指示在否定之前调用该函数。
我不知道这个惯例,但如果它变得普遍,它可能有助于提高可读性。我的意思是,任何阅读!function大块代码顶部的人都会期望自我调用,我们已经习惯的方式在我们看到的情况下期望相同(function。除了我们将失去那些烦人的括号。我希望这是原因,而不是速度或字符数的节省
TA贡献1995条经验 获得超2个赞
除了已经说过的东西,语法与!如果您编写没有分号的javascript,则非常有用:
var i = 1
!function(){
console.log('ham')
}()
i = 2
(function(){
console.log('cheese')
})()
第一个示例按预期输出'ham',但第二个示例将抛出错误,因为i = 2语句由于以下括号而未终止。
同样在连接的javascript文件中,如果前面的代码缺少分号,则不必担心。所以不需要共同的;(function(){})(); 确保你自己不会破坏。
我知道我的答案有点晚了,但我认为还没有提到:)
添加回答
举报