繁体   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