переменная разница между областью действия javascript

Я читаю var scope = "global" ; функция t () { alert ( scope ); // alert: "undefined" var scope = "local" ; alert ( scope ); // alert: "local" } t (); он рассказывает о контексте выполнения и var scope = "global" ; функция t () { alert ( scope ); // alert: "global" } t (); javascript.Below - это простой код:

scope = 'global'
function t() {
  alert(scope) // undefined
  var scope = 'func'
  alert(scope) // func
}
t()

Если я удалю ' var var scope ... = "local"; ', это становится следующим:

scope = 'global'
function t() {
  var scope; // erase previous 'scope', so it is now undefined
  alert(scope) // undefined
  scope = 'func'
  alert(scope) // func
}
t()

Я не понимаю, почему значение области изменяется на «глобальное» во втором случае после удаления var scope = «local» в функции t ().

Может кто-нибудь помочь объяснить это, спасибо!

javascript,variables,scope,

3

Ответов: 5


3

Когда вы это сделаете:

scope = 'global'
function t() {
  alert(scope) // global
}
t()

на линии scopeвы говорите js: смотрите, я определяю «область» в этой функции . Таким образом, JS сбрасывает значение (область). Это как если бы вы сделали:

t

Но если вы просто сделаете

var scope == ...

Вы не создаете переменную scopeв своей функции, поэтому JS не стирает ее значение, и когда вы пытаетесь получить к ней доступ, JS пытается найти ее выше (в этом случае в глобальном пространстве имен)

Надеюсь, вы его получите ... Это действительно немного странно, потому что сначала JS ищет каждую переменную, которую вы объявляете в своей функции (и перезагружаете / инициализируете их), а затем запускаете свою функцию.

Matt


2

По сути, в вашем первом примере область действия scope(т. Е. Var, объявленная внутри функции) является всем телом функции t. Он не имеет значения, пока не попадет в alert(scope)строку, но определяется с самого начала.

Таким образом undefined, решение «scope» является локально определенной переменной, которая еще не имеет значения - то есть undefined.

См. Этот вопрос

Преимущества объявления переменных в верхней части тела функции в JavaScript

для более подробного объяснения.


0
var scope="global";  
function t(){ 
    // you redefine variable scope here
    // so, the global one is not visible.

    alert(scope);  // alert :"undefined"
    alert(window.scope); //alert: "global"
    var scope="local" ; 
    alert(scope);  // alert: "local"
}  
t();  

0

Это из-за концепции под названием hoisting в javascript. Область переменной в функции t () поднимается до начала функции Ie, которую она инициализирует с неопределенным, а позже «local» присваивается ей.


0

Это поведение называется переменным подъемом . Следующий код:

function t() {
    alert(scope);
    var scope = "local";
    alert(scope);
}

Фактически это означает:

function t() {
    var scope;
    alert(scope); // variable was declared in the current scope
                  // but not assigned a value yet
    scope = "local";
    alert(scope); // should alert "local"
}
JavaScript, переменные, область применения,
Похожие вопросы