Все началось с этих простых строк кода:Переменная Scope и Var
a = 3;
b = 2;
function line(x) {
var a = 5;
var b = 4;
return a*x+b;
}
// returns 17
b = line(a) - b;
alert(b);
// returns 36
c = line(a) + b;
alert(c);
Оба предупреждения возврата 17 и 36, соответственно.
Управление работает должным образом. До ...
Я не сделать ошибку изменения
внутри функции следующим образом:
function line(x) {
var a = 5;
b = 4;
return a*x+b;
}
Внезапно линия 13 возвращается 15, строка 17 возвращает 23
и ситуация продолжает ухудшаться Я следую за var
вниз по кроличьей дыре, становясь более запутанной, когда я делаю свой спуск.
Я понимаю, что я мог бы сделать мысленную пометку всегда использовать var
и отдохнуть, зная мой код всегда будет работать как задумано
, но это стало принципиальным вопросом сейчас и теперь мне нужно
, чтобы понять, как var
на самом деле работает.
Вот ссылки на четырех адов,
сделанные (и, возможно,) мне:
Риддл # 1 http://jsfiddle.net/js_test/gNEmY/
Загадка # 2 http://jsfiddle.net/js_test/FJVYL/
Риддл # 3 http://jsfiddle.net/js_test/Vz7Sd/
Риддл # 4 http://jsfiddle.net/js_test/RaA5J/
Если кто-то может дать мне понять
в том, что происходит под капотом
именно, что происходит во время каждого предупреждения() вызов;
Я был бы очень признателен.
возможно дубликат [Разница между использованием вар и не используя вар в JavaScript] (http://stackoverflow.com/questions/1470488/difference-between-using-var-and-not -using-var-in-javascript) – Bergi
Спасибо @Bergi Я так много понимаю. Я больше ищут, что происходит в одной из загадок. – Wilhelm
Varaible [Активация связывания с буквами] (http://ecma-international.org/ecma-262/5.1/#sec-10.5) описана в ECMA-262. * VariableEnvironment * можно рассматривать как недоступный объект, свойства которого являются локальными переменными. – RobG