在JavaScript中,我們可以定義一個函數,然後分配給它,如下所示:分配給函數是否覆蓋函數或創建隱式的全局?
function spam() { return "spam 'n eggs"; }
spam = spam();
spam(); // TypeError: spam is not a function.
此代碼是否改變了一個名爲垃圾全局變量的值,或創建陰影的功能隱式的全局變量垃圾郵件?
在JavaScript中,我們可以定義一個函數,然後分配給它,如下所示:分配給函數是否覆蓋函數或創建隱式的全局?
function spam() { return "spam 'n eggs"; }
spam = spam();
spam(); // TypeError: spam is not a function.
此代碼是否改變了一個名爲垃圾全局變量的值,或創建陰影的功能隱式的全局變量垃圾郵件?
它不覆蓋函數,但它確實爲該變量分配了一個字符串。第一行定義的函數返回一個字符串,並且因爲第二行設置spam
等於返回值(因爲函數被調用(注意括號)),所以垃圾郵件是string。
在瀏覽器控制檯中嘗試這個:window.spam
。在第一行之後,它應該顯示該功能。然後在第二行後顯示該字符串。
function spam() {
return "spam 'n eggs";
}
console.log('typeof spam: ',typeof spam, 'typeof window.spam: ',typeof window.spam);
spam = spam(); //spam is assigned a string
console.log('typeof spam: ',typeof spam, 'typeof window.spam: ',typeof window.spam);
spam(); // TypeError: spam is not a function.
如果我們搬到一個函數內部的代碼,該var關鍵字可用於本地範圍:
function assignSpam() {
var spam = function() { return "spam 'n eggs"; }
console.log('typeof spam after initial assignment: ',typeof spam);
spam = spam(); //spam is assigned a string
console.log('typeof spam after assigning to spam(): ',typeof spam);
spam(); // TypeError: spam is not a function.
}
assignSpam();
spam; //undefined
結果應該是相似的服務器端JavaScript(例如NodeJS)。
這是否代碼改寫由稱爲垃圾全局變量保持的功能,
號分配給垃圾初始值爲給函數的參考。分配新值不會改變功能,它只會爲垃圾郵件分配一個新值。
E.g.
function spam(){return 'I am spam';}
var b = spam;
spam = spam();
console.log(spam) // 'I am spam'
console.log(b); // Original "spam" function
console.log(b()); // 'I am spam'
或創建陰影的功能,垃圾郵件的隱式的全局變量?
它只是爲垃圾郵件分配一個新值。原始函數對象仍然存在,但如果沒有其他引用,則可用於垃圾回收。
這並不完全是我覆蓋的含義(請參閱編輯),但仍然回答我的問題。 – JeremiahB