您的浏览器过于古老 & 陈旧。为了更好的访问体验, 请 升级你的浏览器
Ready 发布于2014年08月29日 10:15

原创 JavaScript Function 对象详解

2389 次浏览 读完需要≈ 10 分钟

内容目录

JavaScript中的Function对象,就是我们常说的函数对象。在JS中,所有的函数也是以对象的形式存在的。

所有主流浏览器均支持Function对象。更多细节信息请参考JavaScript Function对象的属性和方法

语法

Function对象(或称之为Function()函数),其语法有以下两种:

用法一:充当Function对象的构造函数使用,用于结合new关键字构造一个新的Function对象。

new Function( [ argName1 [, argName1 [, argNameN... [, funcBody ]]]] )

用法二:当作普通函数使用,其行为与用法一(使用new关键字)完全一致,相当于用法一省略了new关键字。

Function( [ argName1 [, argName1 [, argNameN... [, funcBody ]]]] )

参数

参数 描述
argName1 可选/String类型定义的第1个参数的名称。
argName2 可选/String类型定义的第2个参数的名称。
argNameN 可选/String类型定义的第N个参数的名称,可以有任意多个。
funcBody 可选/String类型定义的函数主体,即函数内部的执行代码,默认为空字符串("")。

Function()会把传入的最后一个参数作为函数定义的执行代码,之前的所有参数均依次作为函数定义的参数。

  • 如果没有指定任何参数,则表示该函数没有定义参数列表,函数的执行代码也为空。
  • 如果只指定了一个参数,则该参数将被视作函数的执行代码。如果你想定义一个参数、执行代码为空,请传入两个参数,第二个参数为空字符串即可:new Function("argName1", "")

返回值

Function()的返回值是Function类型,返回一个函数对象。

注意:大多数时候,你无需显示地通过new关键字来构造一个Function对象,因为在JavaScript中,你可以直接以function关键字形式声明函数:

function funcName(argName1, argName2, argNameN){
    // funcBody 这里是函数的执行代码
}

JavaScript在调用Function()构造函数时编译由该构造函数创建的对象。虽然它使您的脚本在运行时重新定义函数的情况下具有更大的灵活性,但它也会减慢代码的执行速度。为了避免减慢脚本速度,应尽可能少地使用Function()构造函数。建议优先考虑以function关键字的形式声明函数。

示例&说明

以下是Function()函数的几种常见用法示例:

// 定义一个求和函数:带有2个参数x、y。
var sum = new Function("x", "y", "return x + y;");
// 定义一个输出函数:没有定义参数,输出"CodePlayer"
var foo = Function('var name="CodePlayer"; document.writeln(name);');


// 执行函数
document.writeln( sum( 12, 23 ) ); // 35
foo(); // CodePlayer

document.writeln( typeof sum ); // function
document.writeln( sum instanceof Function ); // true
document.writeln( sum instanceof Object ); // true

运行代码(其他代码请自行复制到演示页面运行)

JS支持以function关键字形式直接声明函数,多数情况下,我们也推荐以function关键字形式声明函数。我们以function关键字形式声明等价于上面两个函数的对应代码如下:

function sum(x, y){
	return x + y;	
}

function foo(){
	var name = "CodePlayer";
	document.writeln( name );
}

// 执行函数
document.writeln( sum( 12, 23 ) ); // 35
foo(); // CodePlayer

document.writeln( typeof sum ); // function
document.writeln( sum instanceof Function ); // true
document.writeln( sum instanceof Object ); // true

使用function关键字也可以声明匿名函数,并将函数的引用赋给某个变量。我们还可以在声明一个匿名函数后,立即执行该函数。

var foo = function(){
	var name = "CodePlayer";
	document.writeln( name );
};

foo(); // CodePlayer


// 在匿名函数的定义代码外面必须加小括号,表示强迫计算并返回计算结果(否则JS只是解析该匿名函数,但无法获得函数引用,进而无法执行该函数)
// 定义代码后面加上小括号,里面可以传入执行所需的参数(这里为2和3)
( function(x, y){
	document.writeln( x + y );
} )(2, 3); // 5

// 上述匿名函数立即执行的代码,还可以如下书写(请注意小括号的位置和匹配):

( function(x, y){
	document.writeln( x + y );
}(2, 3) ) ; // 5
  • CodePlayer技术交流群1
  • CodePlayer技术交流群2

0 条评论

撰写评论

打开导航菜单