[英]Why can't use let to declare a variable using the same name as one function parameter, even the parameter get set default value?
[英]Cannot use let to define a variable with the same name of function's parameter
久违了,我又回到了 javaScript,我刚刚了解了 ES6 的新特性。 这是第一个疑问。
虽然我知道let
变量不能在同一个块范围内声明两次,但我遇到了这种情况:
function tell(story){
let story = {
story
};
}
它给了我一个错误: Uncaught SyntaxError: Identifier 'story' has already been declared
使用var
这工作得很好。
1)这是否意味着我必须使用let
(甚至const
)声明一个具有不同名称的函数参数的变量? 这在变量命名方面可能非常烦人。
为了保持相同的名称,我做了:
function tell(story){
story = {
story
};
}
2) 在这种情况下,变量story
将完全属于函数tell
的范围?
使用
var
这工作得很好。
不是真的, var
完全被忽略了,你实际上有:
function tell(story){
story = {
story
};
}
如果这是您想要的,只需完全关闭var
(和let
)(如上)。
let
的错误解决了这个陷阱,您认为您已经创建了一个(新)变量但没有。 您不能使用let
(或const
)来声明已在同一范围内声明的变量(作为变量或作为参数,这与变量几乎相同)。
1)这是否意味着我必须使用
let
(甚至const
)声明一个具有不同名称的函数参数的变量? 这在变量命名方面可能非常烦人。
这取决于你。 要继续做你正在做的事情,只需完全放弃var
、 let
和const
,因为再一次, var
根本没有任何效果,你正在分配给参数,而不是新变量。 或者继续做你正在做的事情(使用var
),但要明白这是误导。 或者使用let
或const
使用不同的名称——许多人认为更改参数的值不是最佳实践(我个人不是其中之一,但是...),他们会推荐不同的变量.
2) 在这种情况下,变量
story
将完全属于函数tell
的范围?
是的,您正在分配参数story
,这是 local to tell
。
“var 被完全忽略”
并非如此,请考虑以下两个示例:
1:
function someFn(a, b = () => a) {
console.log(a, b());
a = 2;
console.log(a, b());
}
someFn(3);
2:
function someFn(a, b = () => a) {
console.log(a, b());
var a = 2;
console.log(a, b());
}
someFn(3);
在第一个示例中,输出将是:
3 3
2 2
在第二个中:
3 3
2 3
所以var
确实很重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.