2014-01-02 3 views
3

Вот карринг отрывок из javascript patterns:Назначение аргументов для локальных переменных в замыкании

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

Какой смысл местных Варс oldx и Oldy?

+1

Если я не ошибаюсь, я думаю, что здесь нет смысла иметь «старые» переменные. Использование x и y было бы эквивалентным. Но кто-то с большим количеством знаний обеспечит лучший ответ :) –

+0

это не кажется необходимым, функция будет в порядке без oldx или oldy. –

+0

честно - я не вижу смысла копировать их, кроме как именования, чтобы четко различать «старое» и «новое» в анонимной функции. Кроме того, этот фрагмент кода может быть более чистым, вызывая 'add (oldx, newy)' во внутренней функции, поэтому фактическая работа будет кодироваться только один раз ... – chiccodoro

ответ

3

Переменные oldx и oldy совершенно не нужны здесь; код ведет себя одинаково и без них:

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 
    // ... 
} 

Однако, эта потребность не существует в этом коде, так что это совершенно не нужно.