1. lengthプロパティ機能
length
オブジェクト関数の属性値であり、関数はパラメータの数を指し、すなわち、正式なパラメータの数を渡す必要があります。
パラメータは、パラメータの前に、デフォルト値を持っているの最初の数などのパラメータの残りの数、数は含まれていません。
それはコントラストarguments.length
関数が呼び出され、実際のパラメータの受け渡しの数です。
DEMO1:
function foo(a, b=1, c) {
console.log(arguments.length); // 3
// 形参的数量,仅包括第一个具有默认值之前的参数个数
console.log(foo.length); // 1
}
foo(1, 2, 3)
复制代码
DEMO2:
function foo(a, ...args) {
console.log(arguments.length); // 3
console.log(args); // [ 2, 3 ]
// 形参的数量不包括剩余参数个数
console.log(foo.length); // 1
}
foo(1, 2, 3)
复制代码
注意:残りのパラメータは、最終的な表面になっている必要があり、それ以外の場合はエラーになります。
パラメータとの間に2引数関係
2.1厳密モード
引数がパラメータがあり、それは常に変化し、引数のクラスオブジェクトの配列を表し、マッピング関係、変化に対応し、他は自動的にパラメータの変更をという名前の変化に追従します。
function fn(a, b) {
console.log(arguments[0]); // 1
console.log(arguments[1]); // 2
a = 10;
b = 20;
// 改变了形参的值,arguments自动更新
console.log(arguments[0]); // 10
console.log(arguments[1]); // 20
arguments[0] = 100;
arguments[1] = 200;
// 改变了arguments的值,形参自动更新
console.log(a); // 100
console.log(b); // 200
}
fn(1, 2)
复制代码
2.2厳格なモード
機能はデフォルト引数の文言を持っている場合は、aとbの値を変更し、argumentsオブジェクトは影響しないだろう、とstrictモードを入力することはできません。
function fn(a, b) {
'use strict';
console.log(arguments[0]); // 1
console.log(arguments[1]); // 2
a = 10;
b = 20;
// 改变了形参的值,但不影响arguments
console.log(arguments[0]); // 1
console.log(arguments[1]); // 2
arguments[0] = 100;
arguments[1] = 200;
// 改变了arguments的值,但不影响形参
console.log(a); // 10
console.log(b); // 20
}
fn(1, 2)
复制代码
2.3デフォルトパラメータとパラメータ引数は関係ありません。
パラメータの任意の関数がデフォルト値を持っている、とするとすべての引数パラメータマッピング関係は存在しません。この場合、strictモードではと入力することはできません、それ以外の場合はエラーになります。
function fn(a, b=3) {
console.log(arguments[0]); // 1
console.log(arguments[1]); // 2
a = 10;
b = 20;
console.log(arguments[0]); // 1
console.log(arguments[1]); // 2
arguments[0] = 100;
arguments[1] = 200;
console.log(a); // 10
console.log(b); // 20
}
fn(1, 2)
复制代码
function fn(a, b=3) {
'use strict';
console.log(arguments[0]); // 1
console.log(arguments[1]); // 2
a = 10;
b = 20;
console.log(arguments[0]); // 1
console.log(arguments[1]); // 2
arguments[0] = 100;
arguments[1] = 200;
console.log(a); // 10
console.log(b); // 20
}
fn(1, 2)
// 报错:
// SyntaxError: Illegal 'use strict' directive in function // with non-simple parameter list
复制代码
ます。https://juejin.im/post/5cf9ff2be51d4556dc2935f6で再現