正常情况下let或者const声明的变量,是不能在重复声明的,即使是使用var也会报错,eg:let a = 123;var a = 456;错误提示:Uncaught SyntaxError: Identifier 'a' has already been declaredconst C = 123;var C = 456;错误提示:Uncaught SyntaxError: Identifier 'a' has already been declared参数变量是默认声明的,所以不能用let或const再次声明,但是为什么可以使用var声明? 这里的默认声明是指什么?eg:函数内使用var声明参数function foo(x = 5, y = function() { x = 2; }) { var x = 3; y(); console.log(x);}foo() // 不会报错函数内使用let声明参数function foo(x = 5, y = function() { x = 2; }) { let x = 3; y(); console.log(x);}foo() // 会报错 Uncaught SyntaxError: Identifier 'x' has already been declared
4 回答
莫回无
TA贡献1865条经验 获得超7个赞
function foo(x = 5, y = function() { x = 2; }) { let x = 3; y(); console.log(x);} foo()
这里报错,我感觉应该是函数声明的提升,所以应该他是先执行了y(); 所以已经注册了一个x,后面再执行let x=3的时候 ,就会报错。不知道 我的理解有没有错。 他x的赋值应该是 5 2 最后才是let x= 3中报错。
添加回答
举报
0/150
提交
取消