Javascript 无法使用let定义与函数同名的变量';s参数
在长期缺席之后,我将回到javaScript,我刚刚了解了ES6的新特性。这是第一个疑问 虽然我知道在同一块范围内不能两次声明Javascript 无法使用let定义与函数同名的变量';s参数,javascript,Javascript,在长期缺席之后,我将回到javaScript,我刚刚了解了ES6的新特性。这是第一个疑问 虽然我知道在同一块范围内不能两次声明let变量,但我遇到了这种情况: function tell(story){ let story = { story }; } 这给了我一个错误: 未捕获的语法错误:已声明标识符“story” 使用var这很好 1) 这是否意味着我必须使用let(甚至const)声明一个具有不同函数参数名称的变量?就变
let
变量,但我遇到了这种情况:
function tell(story){
let story = {
story
};
}
这给了我一个错误:
未捕获的语法错误:已声明标识符“story”
使用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
,这是tell
的本地参数,因为这样,当您稍后在tell
函数中引用story
时,解释器如何知道您试图引用的story
的哪个绑定?您知道让
做什么吗?在这里,您试图声明一个已经声明的变量。。。