![](/img/trans.png)
[英]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.