Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.01.2019, 12:22
Интересующийся
Отправить личное сообщение для RuBrain Посмотреть профиль Найти все сообщения от RuBrain
 
Регистрация: 20.04.2018
Сообщений: 21

Прочитать агрументы из замыкания
Всем привет.

Подскажите, как прочитать arguments функции secondFunс? Напрямую понятно можно обратиться, а если будет передано неизвестное кол-во аргументов, как перебрать их?

function secondFunc(a, b) {
    return function(c, d){
        for( let i=0; i<arguments.length; i++ ){
            console.log(arguments[i]);
        }
        return a + b + c + d;
    }
}

function mainFunc(second) {
    return second(1,2);
}
console.log( mainFunc( secondFunc(3,5) ) );
Ответить с цитированием
  #2 (permalink)  
Старый 25.01.2019, 12:56
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,705

RuBrain, вы в своем коде разве не получаете все переданные аргументы в функцию(4-я строка)?
В чем вопрос?
Ответить с цитированием
  #3 (permalink)  
Старый 25.01.2019, 13:38
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от RuBrain
как прочитать arguments функции secondFunс?
Например записать их в другой массив...
function secondFunc(a, b) {
	var prm=[];
	for( let i=0; i<arguments.length; i++ ){
		prm[i]=arguments[i]
	};
    return function(c, d){
        for( let i=0; i<prm.length; i++ ){
            alert(prm[i]);
        }
        return a + b + c + d;
    }
}

function mainFunc(second) {
    return second(1,2);
}
alert( mainFunc( secondFunc(3,5) ) );

Последний раз редактировалось ksa, 25.01.2019 в 13:42.
Ответить с цитированием
  #4 (permalink)  
Старый 25.01.2019, 13:55
Интересующийся
Отправить личное сообщение для RuBrain Посмотреть профиль Найти все сообщения от RuBrain
 
Регистрация: 20.04.2018
Сообщений: 21

Понятно, т.е. никакого объекта нету посмотреть наружу.
Ответить с цитированием
  #5 (permalink)  
Старый 25.01.2019, 13:59
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от RuBrain
т.е. никакого объекта нету посмотреть наружу
Не совсем понятное высказывание...

Тебе нужно не известно что... У функции для этого есть специальный объект - arguments. Ты его хочешь видеть внутри еще одной функции, у которой есть свой arguments...
Ясное дело, что "первый" arguments нужно "скопировать" в другой массив или объект. Дабы не упоминать arguments в суе.

Какой тебе еще "специальный" объект нужен?
Ответить с цитированием
  #6 (permalink)  
Старый 25.01.2019, 15:24
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от RuBrain
Подскажите, как прочитать arguments функции secondFunс? Напрямую понятно можно обратиться, а если будет передано неизвестное кол-во аргументов, как перебрать их?
function secondFunc(...args) {
	return function(){
		const allArgs = [...arguments, ...args];
		console.log(allArgs);

		return allArgs.reduce((m, v) => m + v, 0);
	}
}

function mainFunc(second) {
	return second(1,2);
}
console.log(mainFunc(secondFunc(3,5)));


Сообщение от RuBrain
Понятно, т.е. никакого объекта нету посмотреть наружу.
Вы можете присвоить объект arguments от secondFunc и смотреть где угодно!
function secondFunc() {
	const args = arguments;

	return function(){
		const allArgs = [...arguments, ...args];
		console.log(arguments);
		console.log(args);

		return allArgs.reduce((m, v) => m + v, 0);
	}
}

function mainFunc(second) {
	return second(1,2);
}
console.log(mainFunc(secondFunc(3,5)));
Ответить с цитированием
  #7 (permalink)  
Старый 25.01.2019, 16:08
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,126

Сообщение от ksa
Сообщение от RuBrain
т.е. никакого объекта нету посмотреть наружу
Не совсем понятное высказывание...
Он хочет явным образом получить текущий [[scope]] как объект. а так же цепочку вышестоящих [[scope]].
Такого в JS никогда не будет. В разы ухудшится быстродействие увеличится затраты по памяти за сомнительный плюс ссылки на [[scope]] на каждую смену области видимости(вызов функции).
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пример из книги: замыкания ejik3800 Общие вопросы Javascript 1 01.04.2018 10:46
замыкания и утечки памяти newobject Общие вопросы Javascript 1 18.07.2014 12:39
Как прочитать крилицу из файла doc? kilogram Серверные языки и технологии 2 16.05.2012 22:37
Про замыкания Иваннн Общие вопросы Javascript 3 12.01.2011 11:12