From 6b3d758e09cbb4d530db6a6a78a0084485741baf Mon Sep 17 00:00:00 2001 From: Jason Lam Date: Tue, 29 Aug 2023 19:06:19 +0800 Subject: [PATCH] [zh-cn]: Update translation of Function overview (#15440) Co-authored-by: Jason Ren <40999116+jasonren0403@users.noreply.github.com> --- .../global_objects/function/index.md | 71 +++++++++++-------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/files/zh-cn/web/javascript/reference/global_objects/function/index.md b/files/zh-cn/web/javascript/reference/global_objects/function/index.md index 87dfe8b17a27d6..af7b3693292831 100644 --- a/files/zh-cn/web/javascript/reference/global_objects/function/index.md +++ b/files/zh-cn/web/javascript/reference/global_objects/function/index.md @@ -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` 对象。 ## 构造函数 @@ -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(thisArg [, argsArray])")}} - - : 调用一个函数并将其 `this` 的值设置为提供的 `thisArg`。参数可用以通过{{jsxref("Array", "数组")}}对象传递。 -- {{jsxref("Function.prototype.bind()", "Function.prototype.bind(thisArg[, arg1[, arg2[, ...argN]]])")}} - - : 创建一个新的函数,该函数在调用时,会将 `this` 设置为提供的 `thisArg`。在调用新绑定的函数时,可选的参数序列(`[, arg1[, arg2[, ...argN]]]`)会被提前添加到参数序列中(译者注:即调用绑定创建的函数时,传递的参数会接续在可选参数序列后)。 -- {{jsxref("Function.prototype.call()", "Function.prototype.call(thisArg[, arg1, arg2, ...argN])")}} - - : 调用一个函数,并将其 `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) 运算符调用。 ## 示例 @@ -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 ``` @@ -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)}}