оператор удаления с переменными var и non var

javascript

312 просмотра

4 ответа

Я пытался удалить переменную в JavaScript с помощью оператора удаления, но обнаружил некоторые проблемы. Ребята, пожалуйста, объясните приведенный ниже код и почему это происходит.

>> var a = 5;

>> delete a
false

>>a
5

>> b=5;

>>delete b
true

>>b
ReferenceError b is not defined

почему var a = 5 и b = 5 разные?

Автор: jforjs Источник Размещён: 12.11.2019 09:47

Ответы (4)


6 плюса

Решение

Когда переменная создается с помощью объявления переменной (т. Е. С использованием var ), она создается с установленным для нее флагом удаления false .

Когда переменная создается неявно путем присваивания без объявления, ее удаляемый флаг устанавливается в значение true .

Особенностью глобального контекста выполнения является то, что переменные также становятся свойствами глобального объекта (этого не происходит в коде функции или eval). Итак, когда вы делаете:

var a;

Тогда a является переменной, а также свойством глобального объекта (окна в браузере), и его удаляемый флаг имеет значение false . Но:

a = 'foo';

создает как глобальную переменную без объявления, поэтому его deleteable флаг устанавливается в верно .

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

Автор: RobG Размещён: 11.03.2014 06:11

6 плюса

Без использования varприсваивание с =оператором всегда присваивает свойство, во втором случае объект неявно является глобальным объектом ( windowв вашем браузере).

deleteОператор только для удаления свойств на объектах, а не обычные переменные.

Автор: alex Размещён: 11.03.2014 05:48

3 плюса

Оператор delete удаляет объект, свойство объекта или элемент из массива. Оператор также может удалять переменные, которые не объявлены с помощью оператора var.

delete objectName.property 
delete objectName[index] 
Автор: Arjit Размещён: 11.03.2014 05:56

1 плюс

Оператор delete удаляет свойство из объекта, а не обычные переменные. Здесь в этом случае объект является глобальным неявно.

На примечании стороны: -

Когда вы пишете, var x = 5он объявляет переменную x в текущей области видимости, т.е. в контексте выполнения. Если объявление появляется в функции, то объявляется локальная переменная, а если она находится в глобальной области видимости, то объявляется глобальная переменная.

Принимая во внимание, что, когда вы говорите x = 5, тогда это просто присваивание собственности. Сначала он пытается разрешить x в цепочке областей видимости. Если он находит xгде-либо в этой цепочке областей действия, он выполняет присваивание, в противном случае он создает xсвойство для глобального объекта.

Автор: Rahul Tripathi Размещён: 11.03.2014 05:49
Вопросы из категории :
32x32