Что происходит, когда мы напрямую назначаем переменную, не объявляя ее в JavaScript?
JavaScript имеет две области видимости: локальную и глобальную, и когда мы напрямую назначаем переменную без объявления, она становится глобальным свойством объекта окна. В window - это объект браузера. Это не объект JavaScript. Он автоматически создается браузером, и к нему можно получить доступ из любой точки веб-страницы.
Присвоим значение переменной x без ее объявления и проверим с помощью метода hasOwnProperty () , принадлежит ли переменная x объекту окна или нет.
Пример 1:
Javascript
// Before x is not assigned console.log(`1 -> ${window.hasOwnProperty( 'x' )}`); x= 2; // Assigning x without declaring it console.log(`2 -> ${window.hasOwnProperty( 'x' )}`); // To show both value refers to same object console.log(` 3 -> ${window.x === x}`); |
Выход:
1 -> ложь 2 -> верно 3 -> верно
Пример 2: В приведенном ниже примере переменной x присваивается значение без его объявления, поэтому оно станет глобальным свойством, и к нему можно будет получить доступ из любого места.
Javascript
function check(){ y = "GeeksForGeeks" ; } check(); console.log(y); |
Выход:
GeeksForGeeks
Мы также можем получить доступ к этому значению как window.x . Таким образом, функция check () также может быть записана следующим образом:
function check () { window.x = "GeeksForGeeks"; }
Мы также можем показать, что присвоение значения без объявления его стало свойством объекта окна с помощью hasOwnProperty ().
Пример 3:
Javascript
function check(){ x = "GeeksForGeeks" ; } check(); if (window.hasOwnProperty( 'x' )){ console.log(`x is a Property of Window Object`); } |
Выход:
x - свойство объекта Window
Мы можем использовать строгий режим - это новая функция в ECMAScript 5, которая позволяет вам помещать программу или функцию в «строгий» рабочий контекст. Это вызовет ошибку ссылки: x не определено, когда мы присваиваем значение переменной, не объявляя его.
Пример 4:
Javascript
'use strict' // For strict mode try { function check(){ x = "GeeksForGeeks" ; } check(); } catch (err){ console.log(err); } |
Выход:
ReferenceError: x не определен при проверке (<аноним>: 5: 11) в <анонимный>: 7: 5