2011-08-12 105 views
0

任何人都可以向我解釋爲什麼下面的代碼不能在一個函數內工作,但在一個函數之外它完美工作?document.forms.length函數內部返回0,函數外部工作正確

function aa(){ 
    document.forms.length; 
} 

從控制檯運行它返回「不確定」,但是當我剛剛從控制檯運行document.forms.length自己返回的頁面表格的數量。我試圖理解爲什麼這不起作用,但我無法找到它的原因。它發生在Firefox和Chrome上。我沒有看到爲什麼這不起作用的理由。

編輯來澄清一些事情。

頁面完成加載後,它從控制檯運行。以下內容返回正確的值。

document.forms.length; 

因此我不知道它爲什麼這樣做。

確定這裏是測試HTML頁面的確切來源。

<html> 
    <head> 
    <title>test page 01</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <body> 
    <form> 
     <input type="text" name="test1" /> 
    </form> 
    <form> 
     <input type="text" name="tes2" /> 
    </form> 
    </body> 
</html> 

正如你所看到的沒有框架,只有普通的HTML和標籤內的表單。

+0

你叫你的函數你的HTML已經呈現過嗎? –

+0

它從控制檯運行。頁面完成運行後。我等到頁面完成,然後我寫它。我懷疑如果我將它放在一個函數中,它會起作用,因爲document.forms.length在函數外部工作得很好。 – 133794m3r

+0

涉及的任何幀? – lonesomeday

回答

2

你在那裏的功能不會返回任何東西(即當你運行它時,它會返回undefined)。試試這個:

function() { 
    return document.forms.length; 
} 

另外,如果你只運行在控制檯,你仍然可以得到undefined,因爲你還沒有調用功能。你只是創建它,但它仍然沒有被執行。

如果你想在控制檯中運行它,你可以寫

(function() { 
    return document.forms.length; 
}()); 

最後,如果你只寫document.forms.length在控制檯,控制檯會顯示你的價值,因爲length是一個變量。所以這就是爲什麼這似乎工作。

+0

我原來的那個做了一個console.log,它在一個不同的函數中,仍然不想這樣做。並且返回不會真正幫助未定義的值。 – 133794m3r

+0

@ 133794m3r:你原來的那個?如果你在控制檯中寫了'function(){console.log(document.forms.length);}',你仍然只是創建一個函數,而不是執行它。但是如果你編寫'(function(){console.log(document.forms.length);}())'它會創建_and_執行該函數,並且它會在控制檯中記錄長度。我可以保證你的工作,因爲我只是自己嘗試 – Flambino

+0

那麼爲什麼是下面的一個不工作。我原本以爲這是與該功能本身有關。我有一個函數調用它,它總是說下面的變量「len」是0. var len = document.forms.length;它本身就是一個函數。我原本寫這個想法是「功能內」是問題。現在我不知道如果我應該關閉這個並用一個完整的代碼打開一個新的,或者將它永遠留在這裏。 – 133794m3r

0

這不回答爲什麼,但如果返回它,它的工作原理:

function aa(){ 
    return document.forms.length; 
} 
相關問題