Замыкание - не понятен return.
При использовании "замыкания" в js в консоль ничего не выводится. Вроде как return завершает выполнение функции, тогда как реализовать замыкание???
<!DOCTYPE html> <html> <head> <title>Мой сайт</title> <meta charset="UTF-8"> <script src="jsa.js"></script> </head> <body> </body> </html> function get() { var a = 0; return function abcv() { a++; } console.log(a); } get(); Везде искал, не могу понять в чем проблема, надеюсь на помощь, заранее спасибо!) |
Auroar,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Auroar,
function get() { var a = 0; return function abcv() { a++; console.log(a); } } var b = get(); b(); b(); |
Принцип замыканий
Спасибо большое) но непонятно почему мы не можем написать console.log(); в function get(){}, ничего не выведется, но почему, почему нужно именно в function abcv(){}? И для чего в конце присваивать функцию переменной?
|
.
Цитата:
Цитата:
|
Почти все понял
Первое понял, спасибо), последнее не пойму:
После функции abcv в функции get "a" становится равна 1? Если да - то после повторного вызова функции в начале ее указана что a = 0, то-есть она обнуляться должна, почему этого не происходит? function get() { var a = 0; return function abcv() { //Возвращаем 1 a++; console.log(a); } // a = 1 (по идеи) } // Теперь a в get() равна 1 (По идеи) /* ГЛАВНОЕ: Получается когда мы делаем присвоение get() к b мы присваиваем функцию где a = 1, но в начале get() у нас все ровно a присваевается(=) к 0, вот и не пойму. Если при выполнении функции a сразу становится 0. Как оно тогда работает? */ var b = get(); b(); b(); |
Цитата:
|
Часовой пояс GMT +3, время: 15:53. |