Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передать функцию в функцию (https://javascript.ru/forum/misc/27661-peredat-funkciyu-v-funkciyu.html)

_axl 20.04.2012 17:38

Передать функцию в функцию
 
var validator = function(newfunc)
{
    var param = 1;
    var oldfunc = function()
    {
        alert(param);
    }

    oldfunc = newfunc;
    oldfunc();
}

validator(
    function()
    {
        alert(param)
    }
);


При попытке запуска говорит что param undefined. Как передать функцию в функцию, чтобы ей стали доступны переменные функции, в которую она была передана?

devote 20.04.2012 17:47

никак.. приватные переменные нельзя получить из функций созданных не внутри scope где лежат те переменные.

9xakep 20.04.2012 17:48

var validator = function(newfunc)
{
    var param = 1;
    var oldfunc = function()
    {
        alert(param);
    }

    newfunc = new oldfunc
    oldfunc();
}

validator(
    function()
    {
        alert(param)
    }
);

_axl 20.04.2012 17:56

9xakep, у меня так oldfunc выполняется, что делаю не так?
Можно проверить так:
var validator = function(newfunc)
{
    var param = 1;
    var oldfunc = function()
    {
        alert(2);
    }

    newfunc = new oldfunc;
    oldfunc();
}

validator(
    function()
    {
        alert(param)
    }
);

будет выдаваться 2

devote 20.04.2012 18:06

9xakep,
ты хоть сам то понял что написал то? ты два раза вызываешь функцию ту что внутри находится... а та что передается через параметр, ни фига не нужна в твоем примере:
var validator = function(newfunc)
{
    var param = 1;
    var oldfunc = function()
    {
        alert("internal " + param);
    }
 
    newfunc = new oldfunc
    oldfunc();
}
 
validator(
    function()
    {
        alert("external " + param)
    }
);
_axl, яж говорю нельзя получить доступ к приватным данным.. смирись с этим.

9xakep 20.04.2012 18:13

devote,
да я понял уже...
_axl,
сделай param глобальной

devote 20.04.2012 18:26

_axl,
делайте свойства как говорит 9xakep в глобальном пространстве и юзайте их:
var validator = function(newfunc)
{
    var global = {
        param: 1
    }
    var oldfunc = function()
    {
        alert("internal " + global.param);
    }
  
    oldfunc = newfunc || oldfunc;
    oldfunc.call( global );
}

validator();
  
validator(
    function()
    {
        alert("external " + this.param)
    }
);

_axl 21.04.2012 04:38

да я давно так уже сделал: :D
var validator = function(newfunc)
{

    validator.param: 1

    var oldfunc = function()
    {
        alert("internal " + validator.param);
    }
  
    oldfunc = newfunc;
}
  
validator(
    function()
    {
        alert("external " + validator.param)
    }
);


Часовой пояс GMT +3, время: 20:39.