2014-01-03 9 views
0

Как greaterThanTen(9) стать переменной y в функции возврата? Я имею в виду, как параметр (9) стал y в аргументе функции возврата? Не следует ли заменить 9 на x с greaterThanTen = greaterThan(10)? Разве 9 не заменит параметр x = 10? Я просто не понимаю, как этот параметр 9 достигает y в функции возврата.Javascript function in Eloquent Javascript

function greaterThan(x) { 
    return function(y) { 
    return y > x; 
    }; 
} 

var greaterThanTen = greaterThan(10); 
show(greaterThanTen(9)); 
+0

Отметьте этот ответ http://stackoverflow.com/a/20446108/2415293 –

+0

Это отличный пример, теперь у меня есть более глубокое понимание замыканий. –

ответ

2

Он не является «переменной y». Функция greaterThanвозвращает функцию, и значение, переданное в greaterThan, «захвачено» в этой возвращенной функции.

Другими словами, greaterThan(10) создает следующую функцию:

function(y) { return y > 10; } 

Это похоже на письма:

function greaterThan10(y) { return y > 10; } 

Функции, которые создают функции имеют преимущество закрытия ("То, что„захватывает“ 10).

Преимущество в том, что вам не нужно писать функции greaterThanNnn для каждого номера, который вы хотите использовать, вы просто звоните greaterThan(n) за все, что вам нужно. Это, конечно, надуманный, но популярный пример.

Для кусков информации, относящихся к ссылающихся функций, когда использовать (), а когда нет, и некоторые более реалистичные примеры, смотрите также:

+0

Хорошо, ваш ответ действительно помогает мне понять это сейчас. Я думаю, что моя проблема в том, что я не понимаю, что происходит в этой функции возврата. –

+0

@Vodka_Tonic Он возвращался;) В JS сами функции могут быть значениями, такими как '42' или' 'ohai' '. Это мило. –

0

, когда вы назвали bigThan (10), он присвоил значение x и вернул функцию в переменной moreThanTen w Хич теперь становится

var greaterThanTen = function(x){10>x}; 

затем в следующей строке под названием greaterThanTen (9), так что присвоит значение х. Надеюсь, ты понял, что я сказал.