Javascript中的功能是什么意思?
这个问题在这里已经有了答案:
它是自我调用匿名函数的简写或替代方法:
(function(){
// code
})();
可以写成:
!function(){
// code
}();
你也可以用+
代替!
。
如果你只是做了:
function(){
// code
}();
这会产生问题,这就是为什么你需要添加!
在将函数声明转换为函数表达式之前 。
引用文档第12.4节:
ExpressionStatement不能以function关键字开头,因为这可能会使其与FunctionDeclaration模糊不清。
为了更好地理解这个概念,你应该检查:
他们否定结果,而不是函数本身:
!function( x ){ return x }( true );
!true
false
实际上,它是一种稍微压缩的形式:
(function(){}())
因为它需要少一个字符。 它需要的原因是你不能直接调用函数声明,例如这是无效的:
function(){}()
但添加!
在开始时将其转换为函数expression
并使其工作。
它通常用于解决JavaScript语法中的一个怪癖。 这给出了一个语法错误:
function() {
}();
它被读作函数声明(如function foo () {}
),而不是函数表达式。 所以加入! 在它之前或用圆括号包装它,迫使解析器理解它是一个表达式。