(function()
{
//codehere
}
)();
这种语法有什么特别之处? 什么()();暗示?
答案 0 :(得分:40)
创建一个匿名函数,closure和all,而final()告诉它自己执行。
它基本上与:
相同function name (){...}
name();
所以基本上没有什么特别的代码,它只是创建方法并调用它而不必命名的'快捷方式'。
这也意味着该函数是一个off或一个对象的内部函数,并且在需要闭包的特性时最有用。
答案 1 :(得分: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语句可以完成同样的事情,但不用说,大多数浏览器都不支持它。
答案 2 :(得分:2)
这是一个自动执行的匿名函数。最后的()实际上是在调用函数。
一本好书(我已阅读)解释了Javascript中这些类型语法的一些用法是Object Oriented Javascript。
答案 3 :(得分: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
答案 4 :(得分: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/
答案 5 :(得分:0)
第一组括号中的内容评估为函数。然后第二组括号执行此功能。因此,如果你有想要自动运行onload的东西,那么你可以如何加载和执行它。
答案 6 :(得分:0)