当我们直接分配变量而不在 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}`);
Javascript
function check(){
y = "GeeksForGeeks";
}
check();
console.log(y);
Javascript
function check(){
x = "GeeksForGeeks";
}
check();
if(window.hasOwnProperty('x')){
console.log(`x is a Property of Window Object`);
}
Javascript
'use strict' // For strict mode
try{
function check(){
x = "GeeksForGeeks";
}
check();
} catch(err){
console.log(err);
}
输出:
1 -> false
2 -> true
3 ->true
示例 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 is a Property of Window Object
我们可以使用严格模式,这是 ECMAScript 5 中的一项新功能,它允许您将程序或函数置于“严格”操作上下文中。当我们为变量赋值而不声明它时,它会抛出引用错误:x未定义。
示例 4:
Javascript
'use strict' // For strict mode
try{
function check(){
x = "GeeksForGeeks";
}
check();
} catch(err){
console.log(err);
}
输出:
ReferenceError: x is not defined
at check (:5:11)
at :7:5