Javascript对象范围

Javascript对象范围,javascript,Javascript,这是我在一个更大的项目中遇到的问题的简化,所以我希望这是有意义的 我有两个目标: FirstObj = { data : [], init : function() { for(var a = 0; a < 20; a++) { this.data[a] = 1; } } }; SecondObj = { init : function() { va

这是我在一个更大的项目中遇到的问题的简化,所以我希望这是有意义的

我有两个目标:

FirstObj = {
    data : [],

    init : function()
    {
        for(var a = 0; a < 20; a++)
        {
            this.data[a] = 1;
        }
    }
};


SecondObj = {
    init : function()
    {
        var cell = FirstObj.data[0];
        cell = 0;
    }   
};
现在,基于我在Actionscript中的基础,我假设日志将显示一个
数组,其中第一项是
0
,其余的都是
1
,但
0
似乎不固定

为什么
0
值的赋值在这里不成功,但如果不是
cell=0
I直接指向
FirstObj.data[0]=0
,那么赋值工作正常

我猜这是一个范围问题,我可以解决它,但我正试图正确理解JS实际上是如何处理这些东西的,特别是当将代码集中到像这样的对象中时(顺便说一句,这是人们普遍认为的好方法吗?)


感谢您的帮助。

数组索引返回Javascript中的值,而不是引用。这意味着一旦
数据[0]
分配给
单元格
,进一步修改
单元格
将不会影响
数据[0]

分配数组本身将导致您要查找的行为:

SecondObj = {
    init : function()
    {
        var cells = FirstObj.data;
        cells[0] = 0;  // Will also affect data[0].
    }   
};

JavaScript中的数字被称为(与字符串、布尔值
null
undefined
一起)

这意味着,当你

var cell = FirstObj.data[0];
您正在
FirstObj.data[0]
中传递值,而不是对它的引用

你所做的是:

var x = 5;
var y = x; // y is now 5 
y = 4; // y is 4, x is still 5.
当然,像
FirstObj.data[0]=0这样的东西应该可以工作

var x = 5;
var y = x; // y is now 5 
y = 4; // y is 4, x is still 5.