15
(function() 
 {
     //codehere
 }
)();

这种语法有什么特别之处?()() 是什么意思?意味着?

4

7 回答 7

40

创建一个匿名函数,闭包和所有,最后的 () 告诉它自己执行。

它与以下内容基本相同:

function name (){...}
name();

所以基本上这段代码没有什么特别之处,它只是一个创建方法并调用它而不必命名它的“快捷方式”。

这也意味着该函数是一次性的,或者是对象上的内部函数,并且在您需要闭包的特性时最有用。

于 2008-10-09T05:39:12.400 回答
4

这是一个被调用的匿名函数。

这样做的目的是创建一个新的范围,局部变量不会从中流出。例如:

var test = 1;
(function() {
  var test = 2;
})();
test == 1 // true

关于这种语法的一个重要注意事项是,如果您还没有这样做,您应该养成使用分号结束语句的习惯。这是因为 Javascript 允许在调用函数名和括号之间换行。

下面的代码段将导致错误:

var aVariable = 1
var myVariable = aVariable

(function() {/*...*/})()

这是它实际在做的事情:

var aVariable = 1;
var myVariable = aVariable(function() {/*...*/})
myVariable();

创建新块作用域的另一种方法是使用以下语法:

new function() {/*...*/}

不同之处在于,前一种技术不会影响关键字“this”指向的位置,而第二种会影响。

Javascript 1.8 也有一个 let 语句来完成同样的事情,但不用说,大多数浏览器都不支持它。

于 2008-10-09T12:32:11.443 回答
2

那是一个自我执行的匿名函数。最后的 () 实际上是调用函数。

一本解释 Javascript 中这些类型语法的一些用法的好书(我读过)是Object Oriented Javascript

于 2008-10-09T05:39:53.100 回答
2

这种用法基本上等同于 C 中的内部块。它防止在块内定义的变量外部可见。因此,这是一种使用私有对象构建一次性类的便捷方式。只是不要忘记return this;如果你用它来构建一个对象。

var Myobject=(function(){
    var privatevalue=0;
    function privatefunction()
    {
    }
    this.publicvalue=1;
    this.publicfunction=function()
    {
        privatevalue=1; //no worries about the execution context
    }
return this;})(); //I tend to forget returning the instance
                  //if I don't write like this
于 2008-10-09T06:44:55.963 回答
1

另请参阅 Douglas Crockford 的优秀作品“JavaScript:The Good Parts”,可从 O'Reilly 获得,请点击此处:

http://oreilly.com/catalog/9780596517748/

... 以及 YUIblog 上的视频,在这里:

http://yuiblog.com/blog/2007/06/08/video-crockford-goodstuff/

于 2008-10-18T14:02:13.473 回答
0

第一组括号中的内容计算为一个函数。第二组括号然后执行此功能。所以如果你有一些东西想在加载时自动运行,这就是你让它加载和执行的方式。

于 2008-10-09T05:44:19.940 回答
0

John Resig 在此处解释自执行匿名函数

于 2008-10-09T13:47:17.220 回答