很多时候在别人的JavaScript代码里看到这样的结构:
(function(){
alert("hello world");
})();
这是个啥?
刚学JS的时候,我喜欢把js 写成:
function helloFunc(){
alert("hello world");
}
helloFunc();
嗯,很正常的写法,后来发现function其实是个对象,看了好多书后,发现最好还是写成这样:
var helloFunc=function(){
alert("hello world");
}
helloFunc();
但是,(...)(); 这样的结构又是什么意思呢?是不是可以用()来定义function呢? 于是我试图用()来定义一个function:
var helloFunc=(var msg="hello world"; alert(msg););
helloFunc();
可是,这样的语句在执行的时候,根本就是语法错误,行不通,看来是不能仅仅用()来定义function的,那()又是什么意思呢? 在JS里,我们可以用()来包含一个表达式,比如
var i=(1+2);
1+2 在这里是一个表达式,一个expression. 于是我推测,所有的expression都可以用()来包含的,结果就是一个对象。 如果用()来包含一个function, 那么其结果就和var func=function(){} 的格式是一样的。所以在开头里提到的
(function(){
alert("hello world");
})
其实就是一个无名的functon 对象,在后面加个(),很自然,就执行了。 顿时,这种写法就好理解了。