Javascript函数变量范围

时间:2013-05-31 06:20:44

标签: javascript variables scope

执行以下操作有何不同:

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;会有什么不同吗?

1 个答案:

答案 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