簡體   English   中英

將值賦給函數內的全局數組

[英]assign value to an global array inside a function

我寫了一個類似下面的javascript:

<script language="javascript" type="text/javascript">
    var name = new Array();
    var i = 0;
    function doSomething() {
        name[i] = "a";
        alert(name[i]);
        i++;
    }        
</script>

它在我的chrome中警告了undefined而不是a 我試圖alert(i) ,它運作良好。

如何為函數內的全局數組賦值?


問題解決了:我剛剛重命名了數組,它運行了! 但為什么?

namewindow對象的屬性

獲取/設置窗口的名稱。

不要忘記全局變量也是全局對象( window )的屬性。 現在,似乎Firefox允許您覆蓋此屬性,但Chrome不會。 在Chrome控制台中試用:

> name = [];
[]
> typeof name
"string"

輸出應該"object"

結論:不要使用名為name的全局變量。 如果重命名變量, 它可以完美地工作

你正在警告名稱[i]的功能; 但我已經1了,因為你在功能上增加了它。

所以alert(name[0]);

http://jsfiddle.net/5G4Tx/2/

這可能是因為吊裝。
您可能認為變量和函數的定義順序與腳本中出現的順序相同,但事實並非如此。 這是一篇關於吊裝的好文章
當javascript解釋器解析您的腳本時,它會將所有變量移動到范圍的頂部。 這也發生在函數聲明中。 我認為在你的案例中發生的事情是函數聲明已經懸掛在變量之上,因此它們在其范圍內不可用。 此行為可能因瀏覽器而異。 您可以使用函數表達式來修復它。

var name = new Array();
var i = 0;
var doSomething = function() {
    name[i] = "a";
    alert(name[i]);
    i++;
}      

doSomething(); // alerts 'a'

編輯

我剛剛在Chrome中測試了這個答案,但它不起作用。 菲利克斯的答案很好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM