Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 02.09.2012, 02:39
Аватар для Kivi
Интересующийся
Отправить личное сообщение для Kivi Посмотреть профиль Найти все сообщения от Kivi
 
Регистрация: 30.08.2012
Сообщений: 15

Сообщение от nerv_ Посмотреть сообщение
Kivi, думаю, тебе стоит почитать про замыкания.
Учу Javascript по учебнику этого сайта, иду по порядку. Все нормально, но вот в этом месте зацепился за эту перезапись ссылочной переменной.
Но уже разобрался, зацените.
Я думал, что каждый раз, когда происходит что-то подобное:
15	alert( sum(1,2) ); // 6
16	alert( sum(2,3) ); // 10

интерпретатор проходит весь скрипт сначала, а тут ссылка уже указывает на другую функцию (объект). Но теперь понял, что сформируется уже другая функция и будет вызываться "модифицированная" doublingDecorator.

Теперь еще раз перечитал указанный раздел и вижу - ответ там есть, но вот этого нюанса - взгляда с необходимого мне ракурса не было, а уточнение заняло страницу форума.
Спасибо за помощь. Просьба остается в силе - буду рад рассмотреть аналоги исполнения.
Ответить с цитированием
  #22 (permalink)  
Старый 02.09.2012, 20:28
Аватар для Kivi
Интересующийся
Отправить личное сообщение для Kivi Посмотреть профиль Найти все сообщения от Kivi
 
Регистрация: 30.08.2012
Сообщений: 15

Вот еще хрень.
Источник комментарий на habrahabr.ru
var y = 5;
 var x = function(){
     return y;
 };
 var z = function(t){
     var y = 10;
     return t();
 }
 z(x);

Почему в строке 7 return t();?
Что это значит?
Где можно об этом прочитать?
Ответить с цитированием
  #23 (permalink)  
Старый 02.09.2012, 21:13
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Kivi
Почему в строке 7 return t();?
Что это значит?
Где можно об этом прочитать?
смотри внимательней: у тебя есть
1. y - number
2. x - function
3. z - function

z(x); -> вызывается функция z, в которую в качестве аргумента передается другая фунция (x), имя которой (имя аргумента) задается как t.

Лучше скажи, почему y = 5

var y = 5;
 var x = function(){
     return y;
 };
 var z = function(t){
     var y = 10;
     return t();
 }
 alert( z(x) );
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #24 (permalink)  
Старый 03.09.2012, 00:18
Аватар для Kivi
Интересующийся
Отправить личное сообщение для Kivi Посмотреть профиль Найти все сообщения от Kivi
 
Регистрация: 30.08.2012
Сообщений: 15

По-моему у в
3 return y; - есть window.y=5,
а в
6 var y = 10; - это function Lexical Environment.
Сначала х(), а потом уже t(), используют window.y=5.

На этом примере, можешь показать как ты анализируешь области видимости. Так как это было (дословно), когда просматривал этот код, используешь ли какие-то наборы правил типа этих для this (в разделе "Теория").
Может схемку какую рисуешь?
Ответить с цитированием
  #25 (permalink)  
Старый 03.09.2012, 00:34
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Kivi
как ты анализируешь области видимости
Также, как и все
// 1

function() {
	// 2
	
	function() {
		// 3
	
	}
}

Достаточно запомнить одно:

Дэвид Флэнаган:
Цитата:
Функции в JavaScript имеют не динамическую, а лексическую область видимости. Это означает, что они исполняются в области видимости, которая была создана на момент определения функции, а не на момент ее исполнения.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 03.09.2012 в 00:39.
Ответить с цитированием
  #26 (permalink)  
Старый 03.09.2012, 01:16
Аватар для Kivi
Интересующийся
Отправить личное сообщение для Kivi Посмотреть профиль Найти все сообщения от Kivi
 
Регистрация: 30.08.2012
Сообщений: 15

Встречал где-нибдь описание такого
var some_function = new Function('console.log(my_var)'); (именно 'console.log(my_var)') ?
Источник - комментарий на habrahabr.ru
Ответить с цитированием
  #27 (permalink)  
Старый 03.09.2012, 01:29
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Kivi
Встречал где-нибдь описание такого
var some_function = new Function('console.log(my_var)'); (именно 'console.log(my_var)') ?
именно 'console.log(my_var)'? Нет, не встречал

конструктор Function
[[Scope]] для new Function
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 03.09.2012 в 01:33.
Ответить с цитированием
  #28 (permalink)  
Старый 03.09.2012, 15:56
Аватар для Kivi
Интересующийся
Отправить личное сообщение для Kivi Посмотреть профиль Найти все сообщения от Kivi
 
Регистрация: 30.08.2012
Сообщений: 15

Дэвид Флэнаган:

Инструкция return может также использоваться без выражения, тогда она про
сто прерывает исполнение функции, не возвращая значение. Например:

function display_object(obj) {
[I]    // Сначала убедимся в корректности нашего аргумента
    // В случае некорректности пропускаем остаток функции[/I]
    if (obj == null) return;
[I]    // Здесь находится оставшаяся часть функции...[/I]
}


И еще пример

function foo() { 
    if (false) { 
        var x = 1; 
    } 
    return; 
    var y = 1; 
}

Вопрос:
Почему return не в конце?
Если поменять местами строки 5 и 6 что-то изменится?
Ответить с цитированием
  #29 (permalink)  
Старый 04.09.2012, 00:05
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Kivi
Почему return не в конце?
потому, что выполнение функции можно прервать в любом месте.

Сообщение от Kivi
Если поменять местами строки 5 и 6 что-то изменится?
а это мне ты скажи
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #30 (permalink)  
Старый 04.09.2012, 01:31
Аватар для Kivi
Интересующийся
Отправить личное сообщение для Kivi Посмотреть профиль Найти все сообщения от Kivi
 
Регистрация: 30.08.2012
Сообщений: 15

Для возврата значения используется директива return. Она может находиться в любом месте функции.
Как только до нее доходит управление — функция завершается и значение передается обратно.


Есть совет как быть внимательнее, отличный от "Будь внимательнее!" ?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему то работает, то нет? gyunduz Общие вопросы Javascript 0 22.01.2011 16:08
Некорректно работает функция для создания элементов exec Общие вопросы Javascript 4 13.07.2010 11:15
jQuery не так работает на сервере dial jQuery 2 19.11.2009 15:19
Функция не возвращает false, почему? Vitaly jQuery 3 05.07.2009 16:05
почему не работает <body onload=test()> Ichigeki Общие вопросы Javascript 11 29.10.2008 13:49