renovations

This commit is contained in:
Ilya Kantor 2015-01-14 10:23:45 +03:00
parent c7d4c7e3ff
commit e1948130f6
170 changed files with 1496 additions and 1161 deletions

View file

@ -46,26 +46,27 @@ alert(a); // 5
</li>
<li>На второй фазе -- собственно, выполнение.
Присваивание (`=`) значений переменных происходит на второй фазе, когда поток выполнения доходит до соответствующей строчки кода.
Присваивание (`=`) значений переменных происходит, когда поток выполнения доходит до соответствующей строчки кода, до этого они `undefined`.
</li>
</ol>
В начале кода ниже указано содержание глобального объекта на момент окончания инициализации:
В коде ниже указано содержание глобального объекта на момент инициализации и далее последовательно по коду:
```js
// По окончании инициализации, до выполнения кода:
*!*
// На момент инициализации, до выполнения кода:
// window = { f: function, a: undefined, g: undefined }
*/!*
var a = 5; // при инициализации даёт: window.a=undefined
var a = 5;
// window = { f: function, *!*a: 5*/!*, g: undefined }
function f(arg) { /*...*/ } // при инициализации даёт: window.f = function
function f(arg) { /*...*/ }
// window = { f: function, a: 5, g: undefined } без изменений, f обработана ранее
var g = function(arg) { /*...*/ }; // при инициализации даёт: window.g = undefined
var g = function(arg) { /*...*/ };
// window = { f: function, a: 5, g: *!*function*/!* }
```
Кстати, тот факт, что к началу выполнения кода переменные и функции *уже* содержатся в `window`, можно легко проверить:
Кстати, тот факт, что к началу выполнения кода переменные и функции *уже* содержатся в `window`, можно легко проверить, выведя их:
```js
//+ run untrusted refresh
@ -115,17 +116,7 @@ alert(a); // error, a is not defined
a = 5;
```
**Вообще, рекомендуется всегда объявлять переменные через `var`.**
В современном стандарте присваивание без `var` вызовет ошибку:
```js
//+ run
'use strict';
a = 5; // error, a is not defined
```
Это, конечно, для общего понимания, мы всегда объявляем переменные через `var`.
[/smart]
[smart header="Конструкции `for, if...` не влияют на видимость переменных"]