创建函数
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
创建 JavaScript 函数的一种不常用的方式(几乎没有人用)是通过 new 操作符来作用于 Function“构造器”:
var funcName = new Function( [argname1, [... argnameN,]] body );
参数列表中可以有任意多的参数,然后紧跟着是函数体,比如:
var add = new Function("x", "y", "return(x+y)");
print(add(2, 4));
将会打印结果:
6
但是,谁会用如此难用的方式来创建一个函数呢?如果函数体比较复杂,那拼接这个 String要花费很大的力气,所以 JavaScript 提供了一种语法糖,即通过字面量来创建函数:
function add(x, y){
return x + y;
}
或:
var add = function(x, y){
return x + y;
}
事实上,这样的语法糖更容易使传统领域的程序员产生误解,function 关键字会调用Function 来 new 一个对象,并将参数表和函数体准确的传递给Function 的构造器。通常来说,在全局作用域(作用域将在下一节详细介绍)内声明一个对象,只不过是对一个属性赋值而已,比如上例中的 add 函数,事实上只是为全局对象添加了一个属性,属性名为add,而属性的值是一个对象,即 function(x, y){return x+y;},理解这一点很重要,这条语句在语法上跟:
var str = "This is a string";
并无二致。都是给全局对象动态的增加一个新的属性,如此而已。
为了说明函数跟其他的对象一样,都是作为一个独立的对象而存在于 JavaScript 的运行系统,我们不妨看这样一个例子:
function p(){
print("invoke p by ()");
}
p.id = "func";
p.type = "function";
print(p);
print(p.id+":"+p.type);
print(p());
没有错,p 虽然引用了一个匿名函数(对象),但是同时又可以拥有属性,完全跟其他对象一样,运行结果如下:
function (){
print("invoke p by ()");
}
func:function
invoke p by ()
在线练习
{$ activeFileHint $}