Область действия функции Javascript - PullRequest
1 голос
/ 12 сентября 2011

Почему предупреждение печатает 2 в следующем примере? var a неизвестен для работы n ...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <title>Test Doc</title>
    <script type="text/javascript">
        var a = 1;
        function f() {
            var a = 2;
            function n() {
                alert(a);
            }
            n();
        }
        f();
    </script>
</head>

<body>


</body>
</html>

Ответы [ 3 ]

5 голосов
/ 12 сентября 2011

Функции JavaScript наследуют область своих родителей. Внутренние переменные скрывают родительские переменные области видимости с тем же именем.

Дополнительная литература .

0 голосов
/ 12 сентября 2011

Это предупредит "2".

Проверьте ваши примеры JavaScript здесь: jsfiddle.net

Ваш пример вставлен здесь: Ваш пример JavaScript

А почему, черт возьми, var a неизвестно () ??

0 голосов
/ 12 сентября 2011

a объявляется как глобальная переменная, и ей присваивается значение 1. a также объявляется внутри функции f() и присваивается значение 2. Функция n() объявляется внутри функции f()и вызывается после присваивания «внутреннему» a.

. Поэтому, когда вызывается n, идентификатор a будет разрешен из области действия n.Первый переменный объект в цепочке областей действия со свойством a - это объект, объявленный в f, поэтому возвращается его значение.

...