将值赋给函数内的全局数组

时间:2011-04-07 07:29:59

标签: javascript arrays

我写了一个类似下面的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),但效果很好。

如何为函数内的全局数组赋值?


问题解决了:我刚刚重命名了数组,它运行了!但为什么呢?

3 个答案:

答案 0 :(得分:5)

name is a property of the window object

  

获取/设置窗口的名称。

不要忘记全局变量也是全局对象(window)的属性。现在,似乎Firefox允许您覆盖此属性,但Chrome不会。试试Chrome控制台:

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

输出"object"

结论:不要使用名为name的全局变量。如果您重命名变量,则It works perfectly

答案 1 :(得分:0)

你警告名称[i]不在函数中;但我已经1了,因为你在功能上增加了它。

所以alert(name[0]);

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

答案 2 :(得分:0)

这可能是因为吊装 您可能认为变量和函数的定义顺序与脚本中出现的顺序相同,但事实并非如此。 Here is a good article on hoisting
当javascript解释器解析您的脚本时,它会将所有变量移动到范围的顶部。这也发生在函数声明中。我认为在你的案例中发生的事情是函数声明已经悬挂在变量之上,因此它们在其范围内不可用。此行为可能因浏览器而异。您可以使用函数表达式来修复它。

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

doSomething(); // alerts 'a'

修改

我刚刚在Chrome中测试了这个答案,但它不起作用。 菲利克斯的答案很好