[英]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.