2016-01-01 5 views
1

В главе 5 книги «Красноречивый JavaScript» есть этот пример, который я не совсем понимаю. Это шумная функция:Eloquent JavaScript:

function noisy(f) { 
    return function(arg) { 
    console.log("calling with", arg); 
    var val = f(arg); 
    console.log("called with", arg, "- got", val); 
    return val; 
    }; 
} 

noisy(Boolean)(0); 
// → calling with 0 
// → called with 0 - got false 

Когда шумная называется, она имеет два аргумента (Boolean) (0). Как это работает? Можете ли вы вызвать функции и разместить аргументы таким образом? Любая помощь очень ценится, спасибо!

+3

Он вызывает 2 функции, шум, а затем анонимную функцию, возвращаемую шумным. –

+0

* «Когда вызывается шум, у него есть два аргумента» * Нет, у него есть только один аргумент. '(0)' - это отдельный вызов другой функции. –

ответ

0

Boolean в настоящее время передается в noisy в качестве параметра f. noisy сам возвращает функцию, и 0 передается в эту возвращаемую функцию как параметр arg.

2

Можете ли вы вызвать функции и разместить аргументы таким образом?

Да, когда функция возвращается из начальной функции

function noisy(f) { 
    // return anonymous function 
    // `f` : `Boolean` , `arg` : `0` 
    return function(arg) { 
    // `arg` : `0` 
    console.log("calling with", arg); 
    // `f` : `Boolean` , `arg` : `0` 
    var val = f(arg); 
    // `arg` : `0` , `val` : `false` 
    console.log("called with", arg, "- got", val); 
    // return `false` : `Boolean(0)` 
    return val; 
    }; 
} 
// call `noisy` with `Boolean` as parameter, 
// where anonymous function returned from `noisy` 
// call anonymous function returned from `noisy` with `0` 
// as parameter 
noisy(Boolean)(0); 
Смежные вопросы