[英]Recursion in Javascript strange behavior
我正在努力找到這個問題的答案,為什么這樣的代碼:
(function h(){
var x = 1;
return x;
x = 2;
})();
此代碼返回1:
(function g(){
function g(){ return 1; }
return g();
function g(){ return 2; }
})();
返回2
我已經調試了它,並且在兩種情況下都不會超過返回g()或返回x部分。 函數g的遞歸部分應在函數g()的第一個實現中調用它,該函數返回1。
這是因為Javascript提升(帶到頂部)任何函數定義。 解釋器將您的外部函數重新排序為:
(function g(){
function g(){ return 1; }
function g(){ return 2; }
return g();
})();
第二個g()覆蓋第一個g(),因此外部函數返回執行第二個g()的結果。
有關起重的更多信息,請點擊此處
為了獲得您期望的結果,您可以將這些函數分配為var,這不會使它們升降:
(function g(){
var g = function(){ return 1; }
return g();
g = function(){ return 2; }
})()
這就是所謂的吊裝 :
提升是JavaScript的默認行為,即將所有聲明移到當前作用域的頂部(當前腳本或當前函數的頂部)。
您應該小心這一點,並擴展一下,因為您沒有紀律,所以JS在嘗試幫助您時會做的任何魔術都應小心。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.