2017-10-04 59 views
-1

所以,我認爲提升會照顧到這一點。我定義一個函數,我試圖從它被定義在同一事件中調用它具體來說,一些示例代碼,不工作:

$(window).load(function() { 

    doSomething() 

    var doSomething = function(){ 
    alert('working') 
    } 

}) 

它扔我大吃一驚,因爲我調用函數全部通過我的代碼,但我只是意識到它們都是從事件處理程序調用的;沒有一個在線運行,除了我決定應該立即運行的那個。

我想我的問題是,爲什麼不是這個函數懸掛,所以我可以在它定義的相同範圍內調用它?

回答

0

函數定義吊裝只發生在函數聲明而不是函數表達式

當DOM準備好進行交互時,您需要更改(window).ready,因爲準備就緒會被觸發。

希望這會有所幫助。

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 
<script> 
 
$(window).ready(function(){ 
 

 
    doSomething() 
 

 
    function doSomething(){ 
 
    alert('working') 
 
    } 
 

 
}) 
 
</script> 
 
</head> 
 
<body> 
 

 
</body> 
 
</html>

+0

不使用'$ (window).ready(function(){'因爲這已被棄用,使用'$(function(){' –

+0

是的,用戶沒有得到因爲函數表達式。即使他更改爲$(函數)用戶不會得到它。 –

+0

沒有。 document.ready在dom準備就緒時觸發。在加載所有資源後觸發window.load。並改爲您推薦的代碼仍然不能解決我的提升問題。 – user1279629

0

變化

$(window).load(function() {

$(window).on('load',function() {

因爲$(window).load(...已被棄用

然後,試圖聲明var doSomething = function(){ ...第一,然後將doSomething()該行

糾正代碼之後:

$(window).on('load',function() { 

    var doSomething = function(){ 
    alert('working'); 
    } 
    doSomething(); 

}); 
+0

雖然這可能是真的,但改變它並不能解決原始問題;我的功能沒有提升。 – user1279629

+0

@ user1279629看來我現在看到了這個問題,試着首先聲明'var doSomething = function(){...',然後將'doSomething()'放在該行之後 –

+0

我的意思是說,技術上可行,但它仍然不行明白爲什麼這個功能不是託管的。 afaict,我應該能夠在任何地方調用一個函數,而不僅僅是在它被定義之後。 – user1279629

相關問題