es6 函数的 length 属性 && 带参数的函数作用域

函数指定了默认值以后,函数的length属性,将返回没有指定默认值的参数个数。

(function (a) {}).length // 1
(function (a = 5) {}).length // 0
(function (a, b, c = 5) {}).length // 2 定义了 3 个参数,其中有一个参数c指定了默认值,因此length属性等于3减去1,最后得到2

  作用域

var x = 1;

function f(x, y = x) {
  console.log(y);
}

f(2) // 2   默认值 变量x 指向第一个参数x,而不是全局变量x,所以输出是2

  

let x = 1;

function f(y = x) {
  let x = 2;
  console.log(y);
}

f() // 1   参数y = x形成一个单独的作用域。这个作用域里面,变量x本身没有定义,所以指向外层的全局变量x

  

function f(y = x) {
  let x = 2;
  console.log(y);
}

f() // ReferenceError: x is not defined 函数体内部的局部变量x  影响不到 默认值变量x。全局变量x不存在,就会报错。

  

posted @ 2020-03-24 14:57  banzhuxiang  阅读(294)  评论(0)    收藏  举报