Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объясните в чем проблема! замыкание (https://javascript.ru/forum/misc/70350-obyasnite-v-chem-problema-zamykanie.html)

vitek-82 29.08.2017 20:09

Объясните в чем проблема! замыкание
 
// "use strict"

var base = 1000;
var bonus = 1;
function getSalary(x) {
	console.log(base); // 1000
	console.log(bonus); // undefined - почему не "1", если как и в случае с "base", "bonus" должен вытягиваться из замыкания???
	if(x){
		var bonus = 100;
		return base + bonus;
   }
	else{
		return base + bonus;
	};
};

console.log(getSalary(false)); // NAN


что не так с "bonus"?

MallSerg 29.08.2017 20:20

С "bonus" все впорядке.
Замыкания тут вообще нет.
Возможно тебе не до конца понятна механика поднятия переменных в JS.
Так же возможно let тебе поможет.

vitek-82 29.08.2017 20:42

MallSerg, спасибо, давно читал! Забыл уже! Поднятие, все верно) Ниже то как javascript выполняет код!

var base = 1000;
var bonus = 1;
function getSalary(x) {
	var bonus;
	console.log(bonus); // undefined - естественно!!!
	if(x){
		alert('true');
		bonus = 100;
		return base + bonus;
   }
	else{
		alert('false');
		return base + bonus; // 1000 + undefined => NAN
	};
};


А я сломал голову! Спасибо!

ksa 30.08.2017 08:25

Цитата:

Сообщение от vitek-82
что не так с "bonus"?

Он объявлен как приватная переменная...
Цитата:

Сообщение от vitek-82
var bonus = 100;

В строке 09...


Часовой пояс GMT +3, время: 22:00.