我对在我正在使用的应用程序中遇到的问题感到困惑。
我的对象中有一个名为move
的方法,可以在单击列表项时执行此操作(简化)。
var board = {
move: function() {
var unique_id = Puzzle.pieces.id = 28;
// More stuff going on with the unique_id variable.
},
}
然后在整个应用程序中,Puzzle.pieces.id习惯于将id分配给其他类似的东西:
$('#puzzle-piece-' + Puzzle.pieces.id + '');
在考虑它可能会做一段时间之后,我带来了以下内容:
在调用该方法时,unique_id
将一个临时属性分配给Puzzle命名空间对象中的pieces对象。然后在单击新列表项时,该属性将被新值覆盖。
如果这是正确的,通常的做法是在整个应用程序中快速提供临时值,如果没有,它实际上做了什么?
答案 0 :(得分:1)
var unique_id = Puzzle.pieces.id = 28;
装置
Set Puzzle.pieces.id to 28. The act of setting it returns 28. Set unique_id to that return value.
答案 1 :(得分:1)
本声明:
var unique_id = Puzzle.pieces.id = 28;
与这些完全相同:
var unique_id;
Puzzle.pieces.id = 28;
unique_id = Puzzle.pieces.id;
因此,它将28
分配给Puzzle.pieces
对象的“id”属性,然后将该值分配给局部变量unique_id
。需要注意的重要事项是,对“id”属性的赋值在赋值给局部变量之前发生,并且“id”属性实际上与局部变量没有太大关系而不是作为其价值的来源。否则两者是独立的,任何一方都可以在不影响另一方的情况下改变。
这个“id”属性并不是暂时的。如果它已经存在,那么该代码给出了一个新值。如果它不存在,则创建它。在任何一种情况下,该属性都会一直存在,直到它被明确删除。
编辑 - 在注释中正确指出Puzzle.pieces
对象可能具有为“id”属性定义的setter函数,这意味着该属性的值可能不是28
。因此, real 等价物是
var unique_id;
Puzzle.pieces.id = 28;
unique_id = 28;
初始化
var unique_id = Puzzle.pieces.id = 28;
被解析为
var unique_id = (Puzzle.pieces.id = 28);
外部=
右侧的值始终为28
。
答案 2 :(得分:1)
var unique_id = Puzzle.pieces.id = 28;
相当于:
Puzzle.pieces.id = 28;
var unique_id = Puzzle.pieces.id;
在局部变量中保存对id的引用有几个好处,首先它更容易键入unique_id
vs Puzzle.pieces.id
,其次它允许minifiers实现更高的压缩率它可以安全地将unique_id
简化为a
。
根据评论,它更准确地等同于:
var unique_id = 28;
Puzzle.pieces.id = 28;
答案 3 :(得分:-2)
如果直接将unique_id设置为28,它可能会变成整数。如果pieces.id不是整数,那么unique_id可能会以其他类型结束。