Просмотр полной версии : Передать функцию в функцию
var validator = function(newfunc)
{
var param = 1;
var oldfunc = function()
{
alert(param);
}
oldfunc = newfunc;
oldfunc();
}
validator(
function()
{
alert(param)
}
);
При попытке запуска говорит что param undefined. Как передать функцию в функцию, чтобы ей стали доступны переменные функции, в которую она была передана?
никак.. приватные переменные нельзя получить из функций созданных не внутри scope где лежат те переменные.
var validator = function(newfunc)
{
var param = 1;
var oldfunc = function()
{
alert(param);
}
newfunc = new oldfunc
oldfunc();
}
validator(
function()
{
alert(param)
}
);
9xakep, у меня так oldfunc выполняется, что делаю не так?
Можно проверить так:
var validator = function(newfunc)
{
var param = 1;
var oldfunc = function()
{
alert(2);
}
newfunc = new oldfunc;
oldfunc();
}
validator(
function()
{
alert(param)
}
);
будет выдаваться 2
9xakep,
ты хоть сам то понял что написал то? ты два раза вызываешь функцию ту что внутри находится... а та что передается через параметр, ни фига не нужна в твоем примере:
var validator = function(newfunc)
{
var param = 1;
var oldfunc = function()
{
alert("internal " + param);
}
newfunc = new oldfunc
oldfunc();
}
validator(
function()
{
alert("external " + param)
}
); _axl, яж говорю нельзя получить доступ к приватным данным.. смирись с этим.
devote,
да я понял уже...
_axl,
сделай param глобальной
_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)
}
);
да я давно так уже сделал: :D
var validator = function(newfunc)
{
validator.param: 1
var oldfunc = function()
{
alert("internal " + validator.param);
}
oldfunc = newfunc;
}
validator(
function()
{
alert("external " + validator.param)
}
);
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot