很长一段时间后,我将返回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
的范围吗?
答案 0 :(得分:5)
使用
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
本地的参数tell
。