[英]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)
,它運作良好。
如何為函數內的全局數組賦值?
問題解決了:我剛剛重命名了數組,它運行了! 但為什么?
獲取/設置窗口的名稱。
不要忘記全局變量也是全局對象( window
)的屬性。 現在,似乎Firefox允許您覆蓋此屬性,但Chrome不會。 在Chrome控制台中試用:
> name = [];
[]
> typeof name
"string"
輸出應該是"object"
。
結論:不要使用名為name
的全局變量。 如果重命名變量, 它可以完美地工作 。
這可能是因為吊裝。
您可能認為變量和函數的定義順序與腳本中出現的順序相同,但事實並非如此。 這是一篇關於吊裝的好文章 。
當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.