1

这一直让我有点困惑,而且我的编程术语不足以用谷歌搜索它。甚至不确定标题是否有意义。例如,如果我有一个像这样的对象数组......

var someObjects = [{type: 'apple'}, {type: 'orange'}, {type: 'banana'}];

...我说...

var theBestFruit = someObjects[2];

但随后我们在开头添加另一个对象,移动所有元素......

someObjects.unshift({type: 'pear'});

还会theBestFruit引用香蕉对象吗?或者现在会是橙色吗?一些解释将不胜感激。

4

3 回答 3

3

好吧..试试看?

暗示:

someObject[2] 表达式急切地评估为一个(读取:对象),然后绑定(读取:分配给)变量 theBestFruit。除非theBestFruit重新分配(读取:绑定到其他东西),否则它将始终评估为同一个对象(读取:值)。

稍后是否评估其他内容无关紧要someObjects[2]- 它不会影响在(阅读:分配)theBestFruit时确定的绑定。=

于 2012-11-21T05:59:51.107 回答
2

theBestFruit = someObjects[2]将查找 , 的第二个(或第三个,如果您算作非程序员 :p )位置someObject(即 object {type: 'banana'},并将对该对象的直接引用分配给theBestFruit。该引用不是对第二个对象的someObjects. 因此,如果someObjects更改,theBestFruit仍将是{type: 'banana'}

测试它的最好方法是……测试它。

于 2012-11-21T05:58:05.437 回答
1
> var someObjects = [{type: 'apple'}, {type: 'orange'}, {type: 'banana'}];
undefined
> var theBestFruit = someObjects[2];
undefined
> someObjects.unshift({type: 'pear'});
4
> someObjects
[ { type: 'pear' },
  { type: 'apple' },
  { type: 'orange' },
  { type: 'banana' } ]
> theBestFruit
{ type: 'banana' }
> 
于 2012-11-21T05:59:51.757 回答