Вызов анонимной функции в объявлении функции - PullRequest
0 голосов
/ 21 января 2019

Попытка получить доступ к анонимной функции "дождь", передав аргумент

function weather(){
    function sunny(){
        return "Sun is shining!";
    }
    console.log(sunny());

    var raining = function(num){
        var rainThisWeek = " ";
        for (var d = 0; d < num; d++){
            rainThisWeek += "pelting ";
        }
        return rainThisWeek;
    }
}
weather(); 

Ответы [ 3 ]

0 голосов
/ 21 января 2019

Вы можете использовать обратные вызовы для этого типа требований.

function weather(cb){
 cb();
}

var raining = function(num){
 var rainThisWeek = " ";
 for (var d = 0; d < num; d++){
  rainThisWeek += "pelting";
 }
 return rainThisWeek;
}

function sunny(){
 return "Sun is shining!";
}

// for sunny pass sunny as callback to weather function

weather(sunny)

// for raining pass raining as callback to weather function

weather(raining.bind(null, 10))
0 голосов
/ 21 января 2019

Как вы определили метод дождя, вы не можете получить доступ к нему вне функции. Вам либо нужно вернуть метод

  function weather(){
        function sunny(){
            return "Sun is shining!";
        }
        console.log(sunny());
    
        var raining = function(num){
            var rainThisWeek = " ";
            for (var d = 0; d < num; d++){
                rainThisWeek += "pelting";
            }
            return rainThisWeek;
        }
        return raining
    }
    weather()(4);
    

или определите его на экземпляре или прототипе

function weather(){
        function sunny(){
            return "Sun is shining!";
        }
        console.log(sunny());
    
        this.raining = function(num){
            var rainThisWeek = " ";
            for (var d = 0; d < num; d++){
                rainThisWeek += "pelting";
            }
            return rainThisWeek;
        }
    }
    const weather1 = new weather();
    console.log(weather1.raining(3));
0 голосов
/ 21 января 2019

Вы можете использовать функцию curry для доступа к анонимной функции внутри weather().По сути это означает возвращение ссылки на анонимную функцию из внешней функции и выполнение ее с ожидаемым параметром.

function weather(){
    function sunny(){
        return "Sun is shining!";
    }
    console.log(sunny());

    var raining = function(num){
        var rainThisWeek = " ";
        for (var d = 0; d < num; d++){
            rainThisWeek += "pelting";
        }
        return rainThisWeek;
    }
    return raining; //you can curry the anonymous function
}
//-----------------v This will return the anonymous function reference
console.log(weather()(4)); 
//--------------------^ This will execute the returned anonymous function with the parameter 4
...