Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.04.2012, 17:38
Аспирант
Отправить личное сообщение для _axl Посмотреть профиль Найти все сообщения от _axl
 
Регистрация: 21.07.2009
Сообщений: 39

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

    oldfunc = newfunc;
    oldfunc();
}

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


При попытке запуска говорит что param undefined. Как передать функцию в функцию, чтобы ей стали доступны переменные функции, в которую она была передана?
Ответить с цитированием
  #2 (permalink)  
Старый 20.04.2012, 17:47
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

никак.. приватные переменные нельзя получить из функций созданных не внутри scope где лежат те переменные.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 20.04.2012, 17:48
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

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

    newfunc = new oldfunc
    oldfunc();
}

validator(
    function()
    {
        alert(param)
    }
);
__________________
оляля, ололо
Ответить с цитированием
  #4 (permalink)  
Старый 20.04.2012, 17:56
Аспирант
Отправить личное сообщение для _axl Посмотреть профиль Найти все сообщения от _axl
 
Регистрация: 21.07.2009
Сообщений: 39

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

    newfunc = new oldfunc;
    oldfunc();
}

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

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

Последний раз редактировалось _axl, 20.04.2012 в 18:02.
Ответить с цитированием
  #5 (permalink)  
Старый 20.04.2012, 18:06
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

9xakep,
ты хоть сам то понял что написал то? ты два раза вызываешь функцию ту что внутри находится... а та что передается через параметр, ни фига не нужна в твоем примере:
var validator = function(newfunc)
{
    var param = 1;
    var oldfunc = function()
    {
        alert("internal " + param);
    }
 
    newfunc = new oldfunc
    oldfunc();
}
 
validator(
    function()
    {
        alert("external " + param)
    }
);
_axl, яж говорю нельзя получить доступ к приватным данным.. смирись с этим.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 20.04.2012, 18:13
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

devote,
да я понял уже...
_axl,
сделай param глобальной
__________________
оляля, ололо
Ответить с цитированием
  #7 (permalink)  
Старый 20.04.2012, 18:26
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

_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)
    }
);
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 21.04.2012, 04:38
Аспирант
Отправить личное сообщение для _axl Посмотреть профиль Найти все сообщения от _axl
 
Регистрация: 21.07.2009
Сообщений: 39

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

    validator.param: 1

    var oldfunc = function()
    {
        alert("internal " + validator.param);
    }
  
    oldfunc = newfunc;
}
  
validator(
    function()
    {
        alert("external " + validator.param)
    }
);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать переменную в функцию с помощью JQuery??? Иван Я Events/DOM/Window 3 20.01.2012 11:21
setInterval как передать переменную в функцию kamushek Общие вопросы Javascript 6 02.09.2011 23:53
как передать переменную в функцию Virgile Общие вопросы Javascript 2 08.08.2010 22:50
Передать в функцию указание на элемент, из которой она вызвана AndreyLL Events/DOM/Window 3 30.11.2009 09:55
Не получается передать в функцию значение javascript_pupil Events/DOM/Window 9 06.11.2009 15:32