你的問題是這樣的:
爲什麼有時會調用該變量不 給未定義的定義後的變量?
然後你提供這作爲例子:
alert(i); // alert undefined
var i = 1;
它提醒undefined
因爲你發出定義i
的alert()
之前。
而在第一個例子:
function sayAlice() {
var sayAlert = function() { alert(alice); }
var alice = 'Hello Alice';
return sayAlert;
}
sayAlice()() //alert Hello Alice
相同的行爲是可以預料的,但它似乎是叫sayAlice
你奇怪的方式與()()
發生兩次。這基本上意味着它可能會很快發生,但第一次調用sayAlice()
將設置alice
變量,但alert
最有可能發生在通過sayAlice()()
調用的第二次迭代中。
等等。再看一遍,這就是第一個例子中發生的事情。這只是sayAlert
定義爲一個函數,但實際上並沒有運行:
var sayAlert = function() { alert(alice); }
但你這樣做:
var alice = 'Hello Alice';
其中分配一個值alice
。然後你最後這樣做:
return sayAlert;
在前兩項之後會發生哪種情況。意思是,在第三行你定義了一個函數,然後定義了一個變量,但它只在最後一行中出現。
這對我有意義。但sayAlice()()
與雙()
似乎很奇怪。
切換第二個示例中的行,它工作 – Sebastian
是的......我知道。我想知道爲什麼在第一個代碼段工作 – Blake
請參閱我在答案中提供的鏈接,您將學習。 –