誰能請解釋我..爲什麼在對象方法中聲明沒有var的變量不會成爲全局變量?
爲什麼這是一個沒有var
聲明baz
沒有成爲全球variable
?
const foo = {
bar(baz) {
if (!baz)
baz = 1;
}
}
誰能請解釋我..爲什麼在對象方法中聲明沒有var的變量不會成爲全局變量?
爲什麼這是一個沒有var
聲明baz
沒有成爲全球variable
?
const foo = {
bar(baz) {
if (!baz)
baz = 1;
}
}
因爲它被聲明爲函數參數:
const foo = {
bar(baz) {
// ^-------- here
if (!baz)
baz = 1;
}
}
(bar
是功能使用ES2015 method definition語法聲明)
如果沒有一個參數,例如像這樣:
const foo = {
bar() {
// ^----------------- no baz
if (!baz)
baz = 1;
}
}
...然後當foo.bar()
被調用時,如果baz
沒有定義,這將是一個ReferenceError
(因爲Horror of Implicit Globals 只適用於分配了未聲明的符號,而不是從他們閱讀)。
我們經常稱這些「論據」鬆散的,但「說法」在技術上是一個給定的呼叫傳遞的實際值;見MDN和Wikipedia的區別。
這是我的貧血小博客上的一篇文章。
我正要回答同樣的問題。 –
感謝您的詳細解答! – Edgar
因爲它是一個parameter.
包括它在函數聲明隱式聲明它給定的功能範圍。
因爲您將它設置爲函數的參數。爲了使var變成'全局'(這可能削弱程序的彈性,應該避免),你應該在你的函數之外聲明它。
函數參數自動爲本地。 – Barmar