执行以下操作有何不同:
function (callback) {
var callback = callback || false;
combineCallback = function () {
callback.apply(window);
....
}
getJSON(combineCallback);
}
或者用这个:
function (callback) {
var combineCallback = function () {
callback.apply(window);
....
}
getJSON(combineCallback);
}
写写var callback = callback || false;
会有什么不同吗?
答案 0 :(得分:1)
var
不“影子”同一范围内的局部变量。同样,var
不“影子”参数(这是一个局部变量/绑定本身)。简单地说,每次调用函数时,callback
代表不同的局部变量,它最初包含传递的第一个参数;并且只有一个局部变量名为callback
。
因为var没有“创建”一个新变量(搜索“hoisting”),
function (callback) {
var callback = callback || false;
和
function (callback) {
callback = callback || false;
是等价的 - 没有区别。 (虽然我发现后者更清楚。)
但是,删除 callback = callback || false
会更改语义。特别是,回调可能最终会出现false-y值,如0而没有该行。这是否需要/有用是一个不同的问题,因为(false).apply(..)
仍然会导致错误。
以下是x || y
的简单TTL:
x y x || y
------- --- ------
TRUTH-y ANY x
FALSE-y ANY y