Function

Function

Function 构造函数 创建一个新的Function对象

每个函数实际上都是一个Function对象。

语法

new Function ([arg1[, arg2[, ...argN]],] functionBody)

参数

arg1, arg2, ... argN被函数使用的参数的名称必须是合法命名的。参数名称是一个有效的JavaScript标识符的字符串,或者一个用逗号分隔的有效字符串的列表;例如“×”,“theValue”,或“A,B”。functionBody一个含有包括函数定义的JavaScript语句的字符串

描述

使用Function构造器生成的Function对象是在函数创建时解析的。这比你使用函数声明或者函数表达式(function)并在你的代码中调用更为低效,因为使用后者创建的函数是跟其他代码一起解析的。

所有被传递到构造函数中的参数,都将被视为将被创建的函数的参数,并且是相同的标示符名称和传递顺序。

以调用函数的方式调用Function的构造函数 (不是用new关键字) 跟以构造函数来调用是一样的.

Function的属性和方法

全局的Function对象没有自己的属性和方法, 但是, 因为它本身也是函数,所以它也会通过原型链从Function.prototype上继承部分属性和方法。

Function 的原型对象

属性

Function.arguments以数组形式获取传入函数的所有参数。此属性已被arguments替代。

方法

Function.prototype.apply()在一个对象的上下文中应用另一个对象的方法;参数能够以数组形式传入。

Function实例

Function实例从Function.prototype继承了一些属性和方法。 同其他构造函数一样, 你可以改变构造函数的原型从而使得所有的Function实例的属性和方法发生改变。

示例

传入参数调用Function构造函数

下面的代码会创建一个需要两个参数的Function对象

// Example can be run directly in your JavaScript console // Create a function that takes two arguments and returns the sum of those arguments var adder = new Function('a', 'b', 'return a + b' // Call the function adder(2, 6 // > 8

参数"a"和"b"是参数的名字,在函数体中被使用,"return a + b"。

函数构造器和函数声明的区别

使用Function构造器创建的函数不会为其创建上下文及闭包; 他们总是在全球范围内创建。在运行它们时,它们只能访问自己的局部变量和全局变量,而不能调用Function构造函数的范围。这与用eval函数表达式的代码不同。

var x = 10; function createFunction1() { var x = 20; return new Function('return x;' // this |x| refers global |x| } function createFunction2() { var x = 20; function f() { return x; // this |x| refers local |x| above } return f; } var f1 = createFunction1( console.log(f1() // 10 var f2 = createFunction2( console.log(f2() // 20

规范

SpecificationStatusComment
ECMAScript 1st Edition (ECMA-262)StandardInitial definition. Implemented in JavaScript 1.0.
ECMAScript 5.1 (ECMA-262)The definition of 'Function' in that specification.Standard
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Function' in that specification.Standard
ECMAScript Latest Draft (ECMA-262)The definition of 'Function' in that specification.Living Standard

浏览器兼容性

FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)

FeatureAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)