在看es6的时候看到作用域这块,有两段代码比较
let x=1;
function f(y=x){
let x=2;
console.log(y);
}
f();
结果是1
上面这段代码我知道是为什么
可是这段代码
let x=1;
function f(x,y=x){
let x=2;
console.log(y);
}
f();
这段代码报错Identifier 'x' has already been declared这是为什么呢
在看es6的时候看到作用域这块,有两段代码比较
let x=1;
function f(y=x){
let x=2;
console.log(y);
}
f();
结果是1
上面这段代码我知道是为什么
可是这段代码
let x=1;
function f(x,y=x){
let x=2;
console.log(y);
}
f();
这段代码报错Identifier 'x' has already been declared这是为什么呢
有一个不允许重复声明的规则,即:
let不允许在相同作用域内,重复声明同一个变量。
参考文档 阮一峰es6文档let部分
let x=1;
function f(x,y=x){
let x=2;
console.log(y);
}
f();
这段代码在运行时,f()中的参数x 和 y,根据执行环境上下文,读取到的是 let x = 1 ,即参数 x = 1, y = 1,那么在f()这个函数的作用域内,就会出现两个变量x的声明,而在es6中let不允许在相同作用域内,重复声明同一个变量,所以才会出现声明重复的错误。
11 回答1.3k 阅读
3 回答975 阅读✓ 已解决
2 回答957 阅读✓ 已解决
3 回答947 阅读✓ 已解决
2 回答653 阅读
3 回答993 阅读
3 回答972 阅读
参数变量是默认声明的,所以不能用let或const再次声明。
你把问题搞复杂了,本质上和上面存在的问题是一样的