在Javascript定义一个函数通常有以下三种方式:web
function fnMethodName(x){alert(x);}
var fnMethodName = function(x){alert(x);}
var fnMethodName = new Function('x','alert(x);')
上面三种方法定义了同一个方法函数fnMethodName,第1种就是最经常使用的方法,后两种都是把一个函数复制给变量fnMethodName,而这个函数是没有名字的,即匿名函数。浏览器
var f = function fact(x) { if (x < = 1) return 1; else return x*fact(x-1); };
var y = "global"; function constructFunction() { var y = "local"; return new Function("return y"); // 没法获取局部变量 } alert(constructFunction()()); // 输出 "global"
和函数关键字定义相比Function()构造器有本身的特色且要难以使用的多,因此这项技术一般不多使用。而函数字面量表达式和函数关键字定义很是接近。考虑前面的区别,虽然有消息说字面量的匿名函数在OS X 10.4.3下的某些webkit的引擎下有bug,但咱们日常所说的匿名函数均指采用函数字面量形式的匿名函数。更多详细内容能够阅读《JavaScript: The Definitive Guide, 5th Edition》的Functions那章。ide
错误模式:其没法工做,浏览器会报语法错。函数
function(){ alert(1); }();
(function(){ alert(1); } ) ( );
( function(){ alert(2); } ( ) );
void function(){ alert(3); }()
这三种方式是等同的。ui