我试图找到使用这行代码的原因
var cc = cc = cc || {};
在 Cocos2D JavaScript 库中,例如 this地方,但我找不到任何合理的理由。就设置默认值而言,单一赋值是可以的,但双重赋值呢?有人知道这是什么原因吗?
最佳答案
代码等同于:
var cc;
cc = cc || {};
cc = cc;
这显然是一个错误。
更新。我对这个主题做了更多研究,这里有一件有趣的事情:
每当您使用 var
关键字时,它都会在当前范围内创建一个新变量,除非它已经存在于当前范围。基本上这段代码:
var cc = 1;
function test() {
var cc = cc || {};
return cc;
}
test();
将始终生成 {}
,无论 cc
(在全局范围内)的初始值是多少。特别是这段代码:
var cc = [expression];
相当于:
var cc;
cc = [expression];
尽管 var cc;
创建新变量只有当 cc
在当前作用域中不存在时。
更新 2. 哪个操作优先是令人困惑的,因为在 OP 的代码中,两个 =
符号实际上并不相同。第一个表示变量声明,因为它前面有一个 var
关键字。第二个是任务。这就是为什么
var x = y = z;
相当于
var x;
y = z;
x = z;
(注意 var
关键字只适用于 x
)而
x = y = z;
相当于
y = z;
x = z;
(请注意操作 y=z
返回 z
,这并不重要(很明显它可能是 y
)但它是值得注意的是)
结论:左侧的变量声明总是在右侧求值和右侧赋值给左侧之前。
关于javascript - "var cc = cc = cc || {};"行在Cocos2D中有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15405362/