js函数内部用var 与 let 申明与参数相同变量名的前者正常,后者报错

一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域(context)。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的
函数的扩展
var x = 1;function foo(x, y = function() { x = 2; }) {  var x = 3;
  y();  console.log(x);
}

foo() // 3x // 1
var 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 进行申明,就报错了


潇潇雨雨
浏览 1321回答 2
2回答

森林海

我之前也提过这样的问题,可以看一下我的自问我自答链接描述
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript