2. 函数字面量(Function Literals): 复制代码 代码如下: var Name = function(a){ return a; }
3. Function()构造函数:
var Name = new Function("a","return a;") 上面三种方法定义了同一个方法函数Name ,第1种就是最常用的方法,后两种都是把一个函数复制给变量Name ,而这两个函数是没有名字的,难道这就是所谓的匿名函数吗?看下面的解释吧!
函数字面量和Function()构造函数是有区别的! (1). 函数字面量是一个匿名函数,语法允许为其指定任意一个函数名,当写递归函数时可以调用它自己,使用Function()构造函数则不行。 复制代码 代码如下: var f = function fact(x) { if (x < = 1) return 1; else return x*fact(x-1); };
(2). Function()构造函数允许运行时Javascript代码动态的创建和编译。在这个方式上它类似全局函数eval()。 (3). Function()构造函数每次执行时都解析函数主体,并创建一个新的函数对象。所以当在一个循环或者频繁执行的函数中调用Function()构造函数的效率是非常低的。相反,函数字面量却不是每次遇到都重新编译的。 (4). 用Function()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。 复制代码 代码如下: var y = "global"; function constructFunction() { var y = "local"; return new Function("return y"); // 无法获取局部变量 } alert(constructFunction()()); // 输出 "global"