Откуда следующая функция получает параметры? - PullRequest
0 голосов
/ 12 сентября 2018

Функция getFunc не передается параметр, почему этот код работает?

function getFunc() {
    const a = 7;

    return b => {
        console.log(a+b);
    } }

const f = getFunc();

f(5); //12

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018
function getFunc() {
const a = 7;

return function(b) { //it is more clear syntax
    console.log(a+b);
} }

const f = getFunc(); // here we have a function wich get 'b' parameter

f(5); //here we call this function and pass 5 as a 'b' parameter
0 голосов
/ 12 сентября 2018

Это называется закрытием.

В JavaScript код внутри функций имеет доступ к переменным, определенным внутри этой функции, и к переменным, определенным во всех родительских функциях. Если вы ссылаетесь на переменную в дочерней функции, которая определена в родительской функции, а затем возвращаете дочернюю функцию, JavaScript сохранит переменные из родительских функций и они будут доступны в возвращаемых функциях.

В вашем примере вы возвращаете дочернюю функцию

b => {
    console.log(a+b);
}

из getFunc функции, поэтому дочерняя функция все еще имеет доступ к переменной a, определенной в родительской функции. При выполнении f(5) дочерняя функция выполняет выражение 7 + 5, и вы получаете 12 в консоли.

0 голосов
/ 12 сентября 2018

getFunc возвращает анонимную функцию

b =>{
  console.log(a+b);
}

, поэтому при вызове getFunc вы действительно вызываете console.log(7+parameter)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...