Вход

Просмотр полной версии : Передать функцию в функцию


_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)
}
);