Why use NOT operator on anonymous function call? (a la Knockout 2.1.0)
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
What does the exclamation mark do before the function?
如果您查看knockoutJS2.1.0的源代码,您将在第7行看到这样的代码结构:
1 | !function(factory) { ... }(factoryDefinition); |
not运算符使该表达式的计算结果为
这是形成立即执行的函数表达式的简明方法。
传统上,人们使用这两种形式
1 2 | (function(){ }()); // Recommended by Crockford (function(){ })(); // What most people use |
如果你只想用
1 | function(){ }(); // Syntax error |
这将是一个语法错误,因为它被解释为函数声明而不是表达式。这就是为什么需要将函数括在括号中的原因。
但是,如果在函数声明之前放置一元运算符,则不必添加一个余弦圆括号,而且它会切掉代码中的一个字符,这是一个(非常)微小的性能优势。有几个一元运算符可以用于相同的目的
1 2 3 4 | !function(){ }(); ~function(){ }(); -function(){ }(); +function(){ }(); |
因为如果不执行任何操作,则看起来像是语法错误:
1 | function(factory) { ... }(factoryDefinition); |
试试看。
有必要让解析器达到期望表达式的程度,以便在该上下文中识别
有各种不同的选择,每种选择都聚集着不同的意见。