2014-10-16 2 views
0

В книге пытается проиллюстрировать глобальные/локальные переменные сферы он использовал этот пример, чтобы передать концепцию:Почему моя домашняя функция isset в javascript полностью не работает?

test(); 

if (isset(bar)){ 

    alert('bar must be global!'); 

}else{ 

    alert('bar must be local!'); 

} 

function test(){ 

    var foo = 3; 
    bar = 5; 

} 


function isset(varname){ 

    return typeof varname != 'undefined'; 

} 

Прямо сейчас, если возвращается предупреждение «бар должен быть глобальным», что имеет смысл, так как переменные перешел на isset(), bar, в этом случае является глобальным. Но почему оператор if не возвращает предупреждение («foo должно быть локальным»); когда вы проходите, скажем, когда вы проходите foo в функции isset.

+1

Поскольку нет объявлен символ «Foo» при вызове 'Исеть()'. Если вы вызываете 'isset (foo)' from * inside * функцию "test", она будет установлена. – Pointy

+0

Потому что вы просто вызываете 'isset()' один раз с 'bar' в качестве параметра. – Andy

+0

Я знаю, что в теории это имеет смысл. Но не должен ли огонь 'else'? –

ответ

1

Поскольку вы не использовали ключевое слово var, переменная определена в глобальной области действия и по-прежнему существует после выполнения тестовой функции. Это объясняется более подробно here.

2

«Бар» не был объявлен нигде в вашем тесте функции(). Затем Javascript предполагает, что это глобальный var.

Чтобы убедиться, что ваш не делают такого рода ошибки, могу ли я предложить вам использовать:

"use strict"; 

Поместите эту строку в начало файла. Это предотвратит много ошибок, как представлено здесь:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode

Это предотвратит незадекларированные ВАР выступать в качестве глобального ВАР

Смежные вопросы