(function()
{
//codehere
}
)();
这种语法有什么特别之处?()() 是什么意思?意味着?
(function()
{
//codehere
}
)();
这种语法有什么特别之处?()() 是什么意思?意味着?
创建一个匿名函数,闭包和所有,最后的 () 告诉它自己执行。
它与以下内容基本相同:
function name (){...}
name();
所以基本上这段代码没有什么特别之处,它只是一个创建方法并调用它而不必命名它的“快捷方式”。
这也意味着该函数是一次性的,或者是对象上的内部函数,并且在您需要闭包的特性时最有用。
这是一个被调用的匿名函数。
这样做的目的是创建一个新的范围,局部变量不会从中流出。例如:
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 语句来完成同样的事情,但不用说,大多数浏览器都不支持它。
那是一个自我执行的匿名函数。最后的 () 实际上是调用函数。
一本解释 Javascript 中这些类型语法的一些用法的好书(我读过)是Object Oriented Javascript。
这种用法基本上等同于 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
另请参阅 Douglas Crockford 的优秀作品“JavaScript:The Good Parts”,可从 O'Reilly 获得,请点击此处:
http://oreilly.com/catalog/9780596517748/
... 以及 YUIblog 上的视频,在这里:
http://yuiblog.com/blog/2007/06/08/video-crockford-goodstuff/
第一组括号中的内容计算为一个函数。第二组括号然后执行此功能。所以如果你有一些东西想在加载时自动运行,这就是你让它加载和执行的方式。