在看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
不允许在相同作用域内,重复声明同一个变量,所以才会出现声明重复的错误。
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
2 回答4.3k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
5 回答3.8k 阅读
参数变量是默认声明的,所以不能用let或const再次声明。
你把问题搞复杂了,本质上和上面存在的问题是一样的