Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.03.2019, 03:15
Новичок на форуме
Отправить личное сообщение для MarkSM Посмотреть профиль Найти все сообщения от MarkSM
 
Регистрация: 22.03.2019
Сообщений: 5

Миллион нубских вопросов от новичка
И так уже в который раз пытаюсь выучить JS никак не получаеться и не хватает силы воли. В этот раз надеюсь смогу добиться успеха.

В этой теме хотел бы задавать просто все вопросы которые меня мучают и какими бы они тупыми не казались хотелось бы увидеть на них ответы)


Почему в данных двух функциях, есть доступ к переменной let array из function sum если как я читал в книге особенностью переменных let как раз является их действенность только внутри скобок которых она находиться, в моей случае внутри function range.

function range (start, end) {
let array = [];
for (var i = 1; i <= 10; i++) {
array.push(i);
}

return array;
}

function sum(array) {
let total = 0;
for (let value of array) {
total += value;
}

return total;
}
Ответить с цитированием
  #2 (permalink)  
Старый 22.03.2019, 03:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от MarkSM
есть доступ к переменной let array из function sum
Нет такого доступа.
Ответить с цитированием
  #3 (permalink)  
Старый 22.03.2019, 03:23
Новичок на форуме
Отправить личное сообщение для MarkSM Посмотреть профиль Найти все сообщения от MarkSM
 
Регистрация: 22.03.2019
Сообщений: 5

Спасибо за ответ! Но для понимания я бы хотел услышать уточнение разве из function sum не происходит обращение к этой переменной?
Ответить с цитированием
  #4 (permalink)  
Старый 22.03.2019, 03:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от MarkSM
разве из function sum не происходит обращение к этой переменной
Где вы это видите? Потому что это же имя? Ну так в функции sum это аргумент функции, а не то что в какой-то иной было объявлено. С таким же успехом аргумент можно было бы обозвать как "asdf", какая разница, вот только по смыслу такое имя не годится.

var a = range (0, 10); //чему будет равна a и является ли она непосредственно переменной array функции?
a = sum(a); //чему будет равна a?

Последний раз редактировалось laimas, 22.03.2019 в 03:34.
Ответить с цитированием
  #5 (permalink)  
Старый 22.03.2019, 03:41
Новичок на форуме
Отправить личное сообщение для MarkSM Посмотреть профиль Найти все сообщения от MarkSM
 
Регистрация: 22.03.2019
Сообщений: 5

[quote=laimas;505145]Где вы это видите? Потому что это же имя? Ну так в функции sum это аргумент функции, а не то что в какой-то иной было объявлено. С таким же успехом аргумент можно было бы обозвать как "asdf", какая разница, вот только по смыслу такое имя не годится.

Спасибо теперь я понял что это лишь имя аргумента!
Ответить с цитированием
  #6 (permalink)  
Старый 22.03.2019, 08:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

MarkSM,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #7 (permalink)  
Старый 22.03.2019, 11:02
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Тоже самое можно написать так, и тогда такого вопроса не возникает!

function* range(start, end) {
	for (let i = start; i <= end; i++)
		yield i;
}

function sum(array) {
	let total = 0;
	for(const value of array)
		total += value;

	return total;
}

// range(0, 10) |> sum |> alert;
alert(sum(range(0, 10)));
Ответить с цитированием
  #8 (permalink)  
Старый 22.03.2019, 13:17
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

Malleys, в чем преимущество генератора над обычным массивом в коде из поста №7?
Ответить с цитированием
  #9 (permalink)  
Старый 22.03.2019, 13:34
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Код в первом посте range(0, 10) создаёт массив чисел, а затем, при суммировании, на нём (на массиве) запускается итератор массива.

В №7 range(0, 10) создаёт итератор, который запускается при суммировании.

Ещё пример, добавлю функцию
function* take(n, xs) {
	for(const x of xs) {
		if(n-- <= 0)
			break;

		yield x;
	}
}


Теперь, если использовать определения из №1, то alert(sum(take(5, range(1, Infinity)))); никогда ничего не вернёт, поскольку сначала попытается создать массив из всех натуральных чисел! (я в курсе про Number.MAX_SAFE_INTEGER)

Теперь, если использовать определения из №7, то alert(sum(take(5, range(1, Infinity)))); результат будет, поскольку оно просуммирует столько чисел, сколько указано!

Последний раз редактировалось Malleys, 22.03.2019 в 13:36.
Ответить с цитированием
  #10 (permalink)  
Старый 22.03.2019, 13:54
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

Malleys, я знаю, как ведут себя генераторы.
Интересовало почему вы в 7-м посте генератор использовали, результат-то, по сути, один и тот же.
Без генератора скрипт будет пытаться создать массив бесконечной длины, с генератором будет суммировать числа до бесконечности.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Количество вопросов в тесте Alexmor Общие вопросы Javascript 1 09.12.2016 08:42
Рандомный порядок вопросов PinokPodZad Элементы интерфейса 12 16.11.2015 13:16
Необходимо оценить качество вопросов в тесте на знание Java8 testd Ваши сайты и скрипты 0 10.04.2015 18:31
Несколько вопросов новичка FanAizu Общие вопросы Javascript 2 30.10.2011 12:37
Несколько вопросов про jquery от новичка Delfi jQuery 3 24.11.2010 10:55