[JavaScript]无名的function

很多时候在别人的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 对象,在后面加个(),很自然,就执行了。 顿时,这种写法就好理解了。



blog comments powered by Disqus