Что происходит, когда мы напрямую назначаем переменную, не объявляя ее в JavaScript?

Опубликовано: 30 Ноября, 2021

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 

присвоение переменной в строгом режиме