当前位置: 首页 > 中文手册 > JavaScript Function 对象详解

JavaScript Function 对象详解

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
11 1
我们认为: 用户的主要目的,是为了获取有用的信息,而不是来点击广告的。因此本站将竭力做好内容,并将广告和内容进行分离,确保所有广告不会影响到用户的正常阅读体验。用户仅凭个人意愿和兴趣爱好点击广告。
我们坚信:只有给用户带来价值,用户才会给我们以回报。
CodePlayer技术交流群1CodePlayer技术交流群1

帮朋友打一个硬广告:

P2P网贷系统(Java版本) 新年低价大促销,多年P2P技术积累,系统功能完善(可按需定制,可支持第三方存管、银行存管),架构稳定灵活、性能优异、二次开发快速简单。 另可提供二次开发、安装部署、售后维护、安全培训等一条龙服务。

外行看热闹,内行看门道。可以自信地认为,在系统设计上,比市面上的晓风、迪蒙、方维、绿麻雀、国融信、金和盛等P2P系统要好。
深圳地区支持自带技术人员现场考察源代码、了解主要技术架构,货比三家,再决定是否购买。

也可推荐他人购买,一旦完全成交,推荐人可获得实际售价 10% 的返现。
有意向者,详情请 点击这里 联系,工作时间立即回复。