2015-10-09 138 views
-1

我使用setTimeout函數調用一個函數每2秒,這是我的代碼爲什麼setTimeOut在這種情況下不被調用?

這是我的代碼

(function() { 
    main(); 

    function main() { 
     setTimeout(fetchdata, 2000); 
    } 
    var fetchdata = function() { 
     alert("Boom!"); 
    }; 
})(); 

https://jsfiddle.net/bh44ugv6/1/

,但可以請你告訴我,爲什麼setTimeout的不在這種情況下被稱爲?

+0

檢查https://jsfiddle.net/tusharj/bh44ugv6/2/ – Tushar

+0

的main()是一個封閉和setTimeout的沒有訪問功能的表達還沒有被定義尚未 – maioman

+0

你爲什麼認爲'setTimeout'沒有被調用?當你調試你的程序時,它是否訪問該行? –

回答

7

在當你調用mainfetchdata沒有設置時間,所以setTimeout(fetchdata, 2000);使用undefined

您需要調用main()設置fetchdata後:

(function() { 

    function main() { 
     setTimeout(fetchdata, 2000); 
    } 
    var fetchdata = function() { 
     alert("Boom!"); 
    }; 

    main(); 
})(); 

或者使用命名函數來代替:

(function() { 

    main(); 

    function main() { 
     setTimeout(fetchdata, 2000); 
    } 

    function fetchdata() { 
     alert("Boom!"); 
    }; 

})(); 
+0

那麼,在第一個片段中,只有變量聲明被提升到頂部?而函數的賦值發生在代碼中的相同位置? –

+1

@SandeepNayak是的,只有宣言本身被提升到最高。您也可以在分配後編寫聲明'fetchdata = function(){};/*其他代碼*/var fetchdata;' –

1

因爲fetchData尚不存在。如果將其更改爲:

function fetchdata() { 
    alert("Boom!"); 
}; 

它的工作原理。

1

因爲fetchdatamainundefined,如果你想使用Function Expressionsmain前,應定義它,像這樣

(function() { 
 

 
    var fetchdata = function() { 
 
     console.log("Boom!"); 
 
    } 
 
     
 
    main();   
 
    
 
    function main() { 
 
     setTimeout(fetchdata, 2000); 
 
    } 
 
    
 
})();

也可以定義fetchdataFunction Declaration

(function() { 
 
    main(); 
 

 
    function main() { 
 
    setTimeout(fetchdata, 2000); 
 
    } 
 
    
 
    function fetchdata() { 
 
    console.log("Boom!"); 
 
    }; 
 

 
})();

相關問題