JS関数とパラメータ

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で再現

おすすめ

転載: blog.csdn.net/weixin_33696106/article/details/91466001