js函数内部用var 与 let 申明与参数相同变量名的前者正常,后者报错
一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域(context)。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的
函数的扩展
var x = 1;
function foo(x, y = function() { x = 2; }) {
var x = 3;
y();
console.log(x);
}
foo() // 3
x // 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 进行申明,就报错了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
var全局声明实际上就是window.(声明的变量),而在函数里就是私有变量,是函数作用域。let会形成块级作用域,全局声明并不是挂载到window上面(let,和var的区别具体可以看看别个的博客)。你这个实际上都是在全局声明的,自然会冲突。你看看下面代码会不会报错呢
我之前也提过这样的问题,可以看一下我的自问我自答链接描述
var 存在变量提升