var box= new Function('num1', 'num2' ,'return num1 + num2');
PS:第三种方式我们不推荐,因为这种语法会导致解析两次代码(第一次解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能。但我们可以通过这种语法来理解"函数是对象,函数名是指针"的概念。
函数名仅仅是指向函数的指针,因此函数名和包含对象指针的其他变量一样。
也就是说,不同的函数名可以指向同一个函数。
functionhcd(a,b){return a+b;
}
alert(hcd(1,2)); //3var h = hcd; //注意:不带括号的函数名表示的是访问函数指针,不是调用函数
alert(h(3,2)); //5,因为复制的是指针,其实指向的是同一个函数
hcd = null; //表示hcd就和函数断绝关系了,他就不是函数指针了
alert(hcd(0,1)) //hcd is not a function
functionh(a){return a+1;
}
functionh(b){return b+2;
}
alert(h(2));//4
其实和这个是一样的:
var h = function(a){return a+1;
}
h = function(b){return b+2;
}
alert(h(2));//4
2. 函数声明和函数表达式
函数声明:
解析器会先读取函数声明,并使其在执行任何代码前可用。
alert(hcd(1,2));//3
function hcd(a,b){
return a+b;
}
只是因为在解析时将函数声明放在了代码的顶部
函数表达式:
是按代码的顺序执行的。
alert(hcd(1,2));
var hcd = function(a,b){
return a+b;
}
这是会报错误hcd is not a function;
除了这点差别外,其他是一样的。
在ECMAScript中,Function(函数)类型实际上是对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针。一.函数的声明方式1.普通的函数声明function sum(num1,num2){ return num1+num2; }2.使用变量初始化函数var sum = f