一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域(context)。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的函数的扩展var x = 1;function foo(x, y = function() { x = 2; }) { var x = 3;
y(); console.log(x);
}
foo() // 3x // 1var x = 1;function foo(x, y = function() { x = 2; }) { let x = 3;
y(); console.log(x);
}
foo() // 报错,Uncaught SyntaxError: Identifier 'x' has already been declared为什么用在函数内部用var申明与相同的参数变量可行,且会覆盖参数中的同名变量;但是使用let 或 const 就会报错,我对使用 let 与 const 还能理解,因为参数处相当于是用 let x进行了申明,后面再用 let 进行申明,就报错了
添加回答
举报
0/150
提交
取消