Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 30.09.2014, 21:13
Интересующийся
Отправить личное сообщение для extrabass4 Посмотреть профиль Найти все сообщения от extrabass4
 
Регистрация: 25.06.2014
Сообщений: 20

Сообщение от Dim@ Посмотреть сообщение
ну для начала, я немного тупанул, чтобы вызвать alert надо написать sayHi({ name: 'LOL', age: 17 })(); а аналог тем, что
Var call = sayHi({ name: 'LOL', age: 17 });//call - ссылка на возвращаемую ф-ю
call();//её запуск
sayHi({ name: 'LOL', age: 17 })();//получение результата из sayHi т.е. ф-и и ТУТ ЖЕ её запуск
Var call = sayHi({ name: 'LOL', age: 17 }); то есть тут происходит следующее: при присваивание переменная call становиться ссылкой(Function Expression) на вложенную функцию, которая возвращается из sayHi, но к примеру если бы возвращалась не функция, а return 5+5; то переменная call хранила бы в себе результат функции 10, так?
Ответить с цитированием
  #22 (permalink)  
Старый 30.09.2014, 21:29
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от petya
Насколько я себе это представляю, "ссылки на объект НЕ закончились" не означает "Объект все еще нужен", в этом основная разница. А что еще можно под этим понимать?
это лишь вопрос терминологии: в алгоритме mark and sweep, например, ссылки на объект заканчиваются, когда до него нельзя по ссылкам добраться из глобального объекта

а если отбросить вопрос терминологии, то ты просто перебил, так как вопрос по этой формулировке должен был задать тс, а не ты, коего я не послал на гугл по этой "неосвещённой" теме только по причине того, что дал ответы на другие его вопросы в этом посте, поэтому расценивай это как хитрожопость подход типа:
- почему компиляция в байткод является компиляцией, если на выходе может получаться код, далеко не близкий к машинному?
- очень просто: представь, что существует виртуальный процессор, для которого этот байткод является машинным кодом
Ответить с цитированием
  #23 (permalink)  
Старый 30.09.2014, 22:00
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

extrabass4, да
Ответить с цитированием
  #24 (permalink)  
Старый 01.10.2014, 22:29
Интересующийся
Отправить личное сообщение для extrabass4 Посмотреть профиль Найти все сообщения от extrabass4
 
Регистрация: 25.06.2014
Сообщений: 20

function makeCounter() {
  var currentCount = 0;

  // возвращаемся к функции
  function counter() { 
    return ++currentCount;
  }
 
  // ...и добавляем ей методы!
  counter.set = function(value) { 
    currentCount = value;
  };

  counter.reset = function() {
    currentCount = 0;
  };

  return counter;
}

var counter = makeCounter();

alert( counter() ); // 1
alert( counter() ); // 2

counter.reset();
alert( counter() ); // 1


То есть понятия метод в JS употребляется только, когда они находятся в function? и получается функция это своего рода объект судя по синтаксису: counter.set?

Мне не понятно как работает return counter; каков алгоритм действий?Как я понимаю при вызове function makeCounter() создаётся его LexicalEnvironment со свойствами -
LexicalEnvironment = {counter: function(){}}
. При
var counter = makeCounter();
мы вызываем эту функцию и получаем возвращаемую
return counter;
(поч му не так:
return counter();
) ?

И собственно каков алгоритм при
counter.reset();
как всё работает в последовательности? ТО есть
function counter()
теперь как объект ? обращаясь к его методу
counter.reset = function()
мы меняем:

function counter() { 
    return ++currentCount;
  }


на

function counter() { 
    return currentCount = 0;
  }



или как ?

Запутался, объясните пожалуйста по шагам....
Ответить с цитированием
  #25 (permalink)  
Старый 01.10.2014, 22:47
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от extrabass4
и получается функция это своего рода объект
Сообщение от extrabass4
Мне не понятно как работает return counter; каков алгоритм действий?
ты мой пост читал? ссылку на спецификацию там видел?
начни отсюда
http://es5.javascript.ru/x12.html#x12.9
http://es5.javascript.ru/x15.3.html#x15.3
а скорей всего гораздо раньше
и сформулируй свои вопросы соответствующе

Сообщение от extrabass4
поч� �му не так:
return counter();
догадайся с трёх раз
Ответить с цитированием
  #26 (permalink)  
Старый 02.10.2014, 00:35
Аспирант
Посмотреть профиль Найти все сообщения от petya
 
Регистрация: 02.09.2014
Сообщений: 77

Сообщение от extrabass4
То есть понятия метод в JS употребляется только, когда они находятся в function?
Метод -- это свойство со ссылкой на функцию, можно так сказать. Функция в js - это первоклассный объект. На этот объект может быть много ссылок.
f=function waw(){}//f является ссылкой на (скомпилированный) объект function waw(){}
o={}
o.f=f//o.f является ссылкой на (скомпилированный) объект function waw(){}, т.e. тот же самый объект.

Методом обычно называют ссылку типа o.f, хотя это условность, f является global.f (в браузере global -- window)
Сообщение от extrabass4
и получается функция это своего рода объект судя по синтаксису: counter.set?
Да, в js все есть объект, семантически, по факту, примитивные типы не являются объектами, но и с ними можно обращатся как с объектами, они преобразуются в объекты, при необходимости. Функция -- это 100% объект.
Сообщение от extrabass4
работает return counter
Твое непонимание идет от того, что ты не можешь отличить функцию от вызова функции. допустим есть функция. Представь себе, что return - это не синтаксическая конструкция, а функция, которая получает 1 аргумент.
foo=function(){return(yoba)}
return (foo) // return получает в качестве аргумента function(){return(yoba)}
return (foo()) // return получает в качестве аргумента yoba

Прочувствуй эту разницу
Ответить с цитированием
  #27 (permalink)  
Старый 09.10.2014, 22:45
Интересующийся
Отправить личное сообщение для extrabass4 Посмотреть профиль Найти все сообщения от extrabass4
 
Регистрация: 25.06.2014
Сообщений: 20

Сообщение от petya Посмотреть сообщение
Метод -- это свойство со ссылкой на функцию, можно так сказать. Функция в js - это первоклассный объект. На этот объект может быть много ссылок.
f=function waw(){}//f является ссылкой на (скомпилированный) объект function waw(){}
o={}
o.f=f//o.f является ссылкой на (скомпилированный) объект function waw(){}, т.e. тот же самый объект.

Методом обычно называют ссылку типа o.f, хотя это условность, f является global.f (в браузере global -- window)


Да, в js все есть объект, семантически, по факту, примитивные типы не являются объектами, но и с ними можно обращатся как с объектами, они преобразуются в объекты, при необходимости. Функция -- это 100% объект.
Твое непонимание идет от того, что ты не можешь отличить функцию от вызова функции. допустим есть функция. Представь себе, что return - это не синтаксическая конструкция, а функция, которая получает 1 аргумент.
foo=function(){return(yoba)}
return (foo) // return получает в качестве аргумента function(){return(yoba)}
return (foo()) // return получает в качестве аргумента yoba

Прочувствуй эту разницу
Спасибо большое за ответы , но не много не ясно касательно этого "Методом обычно называют ссылку типа o.f, хотя это условность, f является global.f (в браузере global -- window)
"

ведь f это свойство, а о может быть не global, а находиться в функции, то есть LExicalEnviroment

function makeCounter() {
  var currentCount = 0;

  // возвращаемся к функции
  function counter() {
    return ++currentCount;
  }

  // ...и добавляем ей методы!
  counter.set = function(value) {
    currentCount = value;
  };

  counter.reset = function() {
    currentCount = 0;

  };
  return counter;
}

var counter = makeCounter();

alert( counter() ); // 1
alert( counter() ); // 2

counter.reset();
alert( counter() ); // 1


Ведь здесь counter.set, counter.reset , не window.set и window.reset
Ответить с цитированием
  #28 (permalink)  
Старый 09.10.2014, 22:53
Интересующийся
Отправить личное сообщение для extrabass4 Посмотреть профиль Найти все сообщения от extrabass4
 
Регистрация: 25.06.2014
Сообщений: 20

var makeDonkey = function() {
   var name = "Ослик Иа";

   return {
 sayHi: function() {
         alert(name);

       },
       yell: function() {
         alert('И-а, и-а!');
       }
   };
}

var donkey = makeDonkey();
donkey.sayHi();


Вопрос:
Удалится ли переменная name из памяти при выполнении delete donkey.sayHi? Если нет — можно ли к name как-то обратиться после удаления donkey.sayHi?

Ответ:
Нет, name не удалится из памяти, поскольку несмотря на то, что sayHi больше нет, есть ещё функция yell, которая также ссылается на внешний объект переменных. Этот объект хранится целиком, вместе со всеми свойствами.
При этом, так как функция sayHi удалена из объекта и ссылок на нее нет, то больше к переменной name обращаться некому. Получилось, что она «застряла» в памяти, хотя, по сути, никому не нужна.

к чему свойство возвращаемого объекта yell: в данном случае ссылается через SCOPE по отношению к внешнему объекту переменных?
Ответить с цитированием
  #29 (permalink)  
Старый 16.10.2014, 20:22
Интересующийся
Отправить личное сообщение для extrabass4 Посмотреть профиль Найти все сообщения от extrabass4
 
Регистрация: 25.06.2014
Сообщений: 20

не много не понимаю следующую ситуацию: функция = объект и ей можно добавлять свойства - почему в этом случае свойство функции имеет накопительный эффект :

function sayHi() {
  sayHi.count++;
  alert("Привет " + sayHi.count);
}
sayHi.count = 0; // начальное значение
sayHi(); // Привет 1
sayHi(); // Привет 2


Тут тоже всё работает через SCope ? то есть sayHi.count - это свойство global object'a ?

А в этом, нет:

function sayHi() {
sayHi.count = 0; // начальное значение
  sayHi.count++;
  alert("Привет " + sayHi.count);
}

sayHi(); // Привет 1
sayHi(); // Привет 1

Последний раз редактировалось extrabass4, 16.10.2014 в 20:26.
Ответить с цитированием
  #30 (permalink)  
Старый 16.10.2014, 22:18
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

возьми in и проверь
и вообще рассуждаешь о глобальном, а элементарный run добавить не можешь, тест сделать не можешь, оттолкнуться от формулировок спецификации не можешь, одним словом - з-л
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по учебнику extrabass4 Общие вопросы Javascript 1 12.07.2014 14:57
Вопросы от новичка по сортировке массивов и функциям iiv Ваши сайты и скрипты 3 01.07.2014 11:39
Возникли вопросы по созданию игры на javascript alex510i Общие вопросы Javascript 3 19.09.2013 16:46
Разные вопросы по элементам интерфейса от wmag -_- wmag Элементы интерфейса 12 16.08.2012 11:06