(
function f(){
var values = ""; 
for(var v in this)values += v + " "; 
window.alert(values);
}
)
();为何产生两个括弧,前一个括弧是一个function,后一个为空?
各代表什么含义

解决方案 »

  1.   

    匿名函数罢了
    前一个()是函数定义,后一个()是调用。
    相当于function f(){
    var values = "";
    for(var v in this)values += v + " ";
    window.alert(values);
    }f();
      

  2.   

    首先,用括号包围起来的 function(){...} 被js引擎认为是一个function表达式,后面的 () 就调用了这个匿名函数。如果你写成 function(){...}() 那就是语法错误,因为js引擎会期待这里是一个有名字的function声明(func声明与func表达式是不同的);
    但是可以写成 void function(){...}() 也是可以的,因为void关键字会告诉js引擎后面要跟一个表达式,所以后面就被认出来是一个function表达式所产生的匿名函数对象,并进行调用的结果,void会把调用结果抛弃。另外 new function(){}() 也是类似的。这样写的主要好处是,可以把一些不希望暴露出来的内部变量和方法隐藏在匿名函数里面。