Skip to content

Commit

Permalink
[zh-cn]: Update translation of Function overview (#15440)
Browse files Browse the repository at this point in the history
Co-authored-by: Jason Ren <[email protected]>
  • Loading branch information
JasonLamv-t and jasonren0403 authored Aug 29, 2023
1 parent 63a8d9f commit 6b3d758
Showing 1 changed file with 41 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ slug: Web/JavaScript/Reference/Global_Objects/Function

{{JSRef}}

每个 JavaScript 函数实际上都是一个 `Function` 对象。运行 `(function(){}).constructor === Function // true` 便可以得到这个结论
**`Function`** 对象提供了用于处理[函数](/zh-CN/docs/Web/JavaScript/Reference/Functions)的方法。在 JavaScript 中,每个函数实际上都是一个 `Function` 对象

## 构造函数

Expand All @@ -14,27 +14,38 @@ slug: Web/JavaScript/Reference/Global_Objects/Function

## 实例属性

- {{jsxref("Function.prototype.arguments")}} {{Deprecated_Inline}}
- : 对应传递给函数的参数数组,这个 {{jsxref("Function")}} 的属性已被弃用,请改用 {{jsxref("Functions/arguments", "arguments")}} 对象(仅在函数范围内可用)。
- {{jsxref("Function.prototype.caller")}} {{Deprecated_Inline}}
- : 表明调用当前函数执行的函数,此属性已被弃用,且仅对一些不严格的函数可用。
- {{jsxref("Function.prototype.displayName")}}
以下属性定义在 `Function.prototype` 上,并且被所有 `Function` 实例共享。

- {{jsxref("Function.prototype.arguments")}} {{Deprecated_Inline}} {{Non-standard_Inline}}
- : 表示传递给该函数的参数。对于[严格模式](/zh-CN/docs/Web/JavaScript/Reference/Strict_mode)、箭头函数、异步函数和生成器函数,访问 `arguments` 属性会抛出 {{jsxref("TypeError")}} 异常。请改为在函数闭包内使用 {{jsxref("Functions/arguments", "arguments")}} 对象。
- {{jsxref("Function.prototype.caller")}} {{Deprecated_Inline}} {{Non-standard_Inline}}
- : 表示调用该函数的函数。对于[严格模式](/zh-CN/docs/Web/JavaScript/Reference/Strict_mode)、箭头函数、异步函数和生成器函数,访问 `caller` 属性会抛出 {{jsxref("TypeError")}} 异常。
- {{jsxref("Object/constructor", "Function.prototype.constructor")}}
- : 创建实例对象的构造函数。对于 `Function` 实例来说,初始值是 {{jsxref("Function/Function", "Function")}} 构造函数。

以下属性是每个 `Function` 实例的自有属性。

- {{jsxref("Function/displayName", "displayName")}} {{Non-standard_Inline}} {{Optional_Inline}}
- : 函数的显示名称。
- {{jsxref("Function.prototype.length")}}
- : 函数期望的参数数量
- {{jsxref("Function.prototype.name")}}
- {{jsxref("Function/length", "length")}}
- : 指定函数期望的参数个数
- {{jsxref("Function/name", "name")}}
- : 函数的名称。
- {{jsxref("Function/prototype", "prototype")}}
- : 在使用 `function` 作为构造函数与 [`new`](/zh-CN/docs/Web/JavaScript/Reference/Operators/new) 运算符一起使用时,用作新对象的原型。

## 实例方法

- {{jsxref("Function.prototype.apply()", "Function.prototype.apply(<var>thisArg</var> [, <var>argsArray</var>])")}}
- : 调用一个函数并将其 `this` 的值设置为提供的 `thisArg`。参数可用以通过{{jsxref("Array", "数组")}}对象传递。
- {{jsxref("Function.prototype.bind()", "Function.prototype.bind(<var>thisArg</var>[, <var>arg1</var>[, <var>arg2</var>[, ...<var>argN</var>]]])")}}
- : 创建一个新的函数,该函数在调用时,会将 `this` 设置为提供的 `thisArg`。在调用新绑定的函数时,可选的参数序列(`[, arg1[, arg2[, ...argN]]]`)会被提前添加到参数序列中(译者注:即调用绑定创建的函数时,传递的参数会接续在可选参数序列后)。
- {{jsxref("Function.prototype.call()", "Function.prototype.call(<var>thisArg</var>[, <var>arg1</var>, <var>arg2</var>, ...<var>argN</var>])")}}
- : 调用一个函数,并将其 `this` 值设置为提供的值。也可以选择传输新参数。
- {{jsxref("Function.prototype.toString()", "Function.prototype.toString()")}}
- : 返回表示函数源码的字符串。覆盖了 {{jsxref("Object.prototype.toString")}} 方法。
- {{jsxref("Function.prototype.apply()")}}
- : 使用给定的 `this` 值和可选的参数数组(或[类数组对象](/zh-CN/docs/Web/JavaScript/Guide/Indexed_collections#使用类数组对象))作为参数来调用一个函数。
- {{jsxref("Function.prototype.bind()")}}
- : 创建一个新的函数,在调用时,其 `this` 关键字被设置为提供的值,可选地在调用新函数时在提供的参数之前加上一系列给定的参数。
- {{jsxref("Function.prototype.call()")}}
- : 使用给定的 `this` 值和可选参数调用一个函数。
- {{jsxref("Function.prototype.toString()")}}
- : 返回表示函数源代码的字符串。重写了 {{jsxref("Object.prototype.toString")}} 方法。
- [`Function.prototype[@@hasInstance]()`](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/@@hasInstance)
- : 指定确定构造函数是否将对象识别为其实例的默认过程。由 [`instanceof`](/zh-CN/docs/Web/JavaScript/Reference/Operators/instanceof) 运算符调用。

## 示例

Expand All @@ -43,24 +54,25 @@ slug: Web/JavaScript/Reference/Global_Objects/Function
`Function` 构造函数创建的函数不会创建当前环境的闭包,它们总是被创建于全局环境,因此在运行时它们只能访问全局变量和自己的局部变量,不能访问它们被 `Function` 构造函数创建时所在的作用域的变量。这一点与使用 {{jsxref("Global_Objects/eval", "eval()")}} 执行创建函数的代码不同。

```js
// 使用 `var` 创建一个全局属性
var x = 10;

function createFunction1() {
var x = 20;
return new Function("return x;"); // 这里的 x 指向最上面全局作用域内的 x
const x = 20;
return new Function("return x;"); // 这个 `x` 指的是全局 `x`
}

function createFunction2() {
var x = 20;
const x = 20;
function f() {
return x; // 这里的 x 指向上方本地作用域内的 x
return x; // 这个 `x` 指的是上面的局部 `x`
}
return f;
}

var f1 = createFunction1();
const f1 = createFunction1();
console.log(f1()); // 10
var f2 = createFunction2();
const f2 = createFunction2();
console.log(f2()); // 20
```

Expand All @@ -76,10 +88,9 @@ console.log(f2()); // 20

## 参见

- {{jsxref("Functions", "函数与函数作用域")}}
- {{jsxref("Statements/function", "函数声明")}}
- {{jsxref("Operators/function", "函数表达式")}}
- {{jsxref("Statements/function*", "function* 声明")}}
- {{jsxref("Operators/function*", "function* 表达式")}}
- {{jsxref("AsyncFunction", "异步函数")}}
- {{jsxref("GeneratorFunction", "生成器函数")}}
- [函数声明](/zh-CN/docs/Web/JavaScript/Reference/Statements/function)
- [函数表达式](/zh-CN/docs/Web/JavaScript/Reference/Operators/function)
- {{jsxref("AsyncFunction")}}
- {{jsxref("AsyncGeneratorFunction")}}
- {{jsxref("GeneratorFunction")}}
- {{jsxref("Functions", "函数", "", 1)}}

0 comments on commit 6b3d758

Please sign in to comment.