Function 构造函数通过 new
创建一个新的 Function 对象。 在 JavaScript 中,每个函数实际上都是一个 Function 对象。
构造函数
new Function ( [ argName1 [, argName1 [, argNameN... [, funcBody ]]]] )
函数类型转换函数
Function ( [ argName1 [, argName1 [, argNameN... [, funcBody ]]]] )
参数 | 说明 | 类型 |
---|---|---|
argName1 | 定义的第 1 个参数的名称 | string |
argName2 | 定义的第 2 个参数的名称 | string |
argNameN | 定义的第 N 个参数的名称,可以有任意多个 | string |
funcBody | 定义的函数主体,即函数内部的执行代码,默认为空字符串("" ) | string |
Function()
会把传入的最后一个参数作为函数定义的执行代码,之前的所有参数均依次作为函数定义的参数。
new Function("argName1", "")
。Function()
的返回值是 Function 类型,返回一个函数对象。
eval
不同new
关键字)跟以构造函数来调用是一样的Function.arguments
:以数组形式获取传入函数的所有参数。此属性已被 arguments
替代。Function.caller
:获取调用函数的具体对象Function.length
:获取函数的接收参数个数Function.name
:获取函数的名称Function.displayName
:获取函数的 display name定义一个求和函数:带有 2 个参数 x
、y
const sum = new Function('x', 'y', 'return x + y;');
定义一个输出函数:没有定义参数,输出 "CodePlayer"
const foo = Function('var name="CodePlayer"; console.log(name);');
执行函数。
console.log(sum(12, 23));// 35foo();// CodePlayerconsole.log(typeof sum);// functionconsole.log(sum instanceof Function);// trueconsole.log(sum instanceof Object);// true
JavaScript 支持以 function
关键字形式直接声明函数,多数情况下,我们也推荐以 function
关键字形式声明函数。我们以 function
关键字形式声明等价于上面两个函数的对应代码如下:
function sum(x, y) {return x + y;}function foo() {var name = 'CodePlayer';console.log(name);}// 执行函数console.log(sum(12, 23));// 35foo();// CodePlayerconsole.log(typeof sum);// functionconsole.log(sum instanceof Function);// trueconsole.log(sum instanceof Object);// true
使用 function
关键字也可以声明匿名函数,并将函数的引用赋给某个变量。我们还可以在声明一个匿名函数后,立即执行该函数。
var foo = function () {var name = 'CodePlayer';console.log(name);};foo();// CodePlayer
在匿名函数的定义代码外面必须加小括号,表示强迫计算并返回计算结果(否则 JavaScript 只是解析该匿名函数,但无法获得函数引用,进而无法执行该函数)。
定义代码后面加上小括号,里面可以传入执行所需的参数(这里为 2
和 3
)
(function (x, y) {console.log(x + y);})(2, 3);// 5
上述匿名函数立即执行的代码,还可以如下书写(请注意小括号的位置和匹配):
(function (x, y) {console.log(x + y);})(2, 3);// 5
如下代码块中 f()
函数返回的 function e()
是闭包。
const n = 1;function f() {const n = 2;function e() {return n;}return e;}console.log(f()());// 2
如下代码中 f()
函数返回的 function e()
是全局作用域函数。
const n = 1;function f() {const n = 2;const e = new Function('return n;');return e;}console.log(f()());// 1