在闭包中为局部变量赋值

时间:2014-01-02 14:13:51

标签: javascript closures currying

以下是来自javascript patterns的一个currying片段:

function add(x, y) {
    var oldx = x, oldy = y;
    if (typeof oldy === "undefined") { // partial
        return function (newy) {
             return oldx + newy;
        }
    }
    // full application
    return x + y;
}

参考:https://github.com/shichuan/javascript-patterns/blob/master/function-patterns/currying.html

当地的vars oldx和oldy有什么意义?

1 个答案:

答案 0 :(得分:3)

此处完全没有变量oldxoldy;代码在没有它们的情况下表现相同:

function add(x, y) {
    if (typeof y === "undefined") { // partial
        return function (y) {
             return x + y;
        }
    }
    // full application
    return x + y;
}

此处返回的函数可以访问外部作用域变量,无论这些变量是使用var声明还是声明为外部函数的形式参数。

一般来说,如果x是原语,如果您需要该值的副本以独立于原始值进行更改,则有时将其分配给新变量是有意义的:

function foo(x) {
    var newX = x;
    newX += 7;
    // now newX and x are different
    // ...
}

但是,此代码中不存在此需求,因此完全没有必要。