可能重复:
感叹号在功能之前做了什么?
如果你看一下KnockoutJS 2.1.0的源代码,你会在第7行看到这样的代码结构:
!function(factory) { ... }(factoryDefinition);
Run Code Online (Sandbox Code Playgroud)
not运算符导致此表达式计算true而不是undefined,但为什么要打扰?
Pet*_*son 49
这是形成立即执行的函数表达式的简明方法.
传统上,人们使用这两种形式
(function(){ }()); // Recommended by Crockford
(function(){ })(); // What most people use
Run Code Online (Sandbox Code Playgroud)
如果你试图使用
function(){ }(); // Syntax error
Run Code Online (Sandbox Code Playgroud)
它将是语法错误,因为它被解释为函数声明而不是表达式.这就是您需要将函数包装在括号中的原因.
但是如果在函数声明之前放置一元运算符,则不必添加一个cosing括号,它会删除代码中的一个字符,这是一个(非常)微小的性能优势.有几个一元运算符可用于同一目的
!function(){ }();
~function(){ }();
-function(){ }();
+function(){ }();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6993 次 |
| 最近记录: |