JavaScript 当我们直接赋值给变量而不声明时会发生什么
JavaScript有两个作用域:局部作用域和全局作用域。当我们直接赋值给一个变量而不声明时,它成为了window对象的全局属性。window是浏览器的对象,而不是JavaScript的对象。它由浏览器自动创建,并且可以从网页的任何位置访问。
让我们给一个变量x赋值而不声明它,并使用hasOwnProperty()方法检查变量x是否属于window对象。
示例1:此示例检查上述方法。
<script>
// Before x is not assigned
console.log(`{window.hasOwnProperty('x')}`);
x= 2; // Assigning x without declaring it
console.log(`{window.hasOwnProperty('x')}`);
// To show both value refers to same object
console.log(`${window.x === x}`);
</script>
输出:
false
true
true
示例2: 在下面的示例中,变量x被赋值而没有声明,因此它将成为一个全局属性,可以从任何地方访问。
<script>
function check(){
y = "GeeksForGeeks";
}
check();
console.log(y);
</script>
输出:
GeeksForGeeks
我们也可以通过 window.x 来获取这个值。所以函数check()也可以写成下面这样:
function check(){
window.x = "GeeksForGeeks";
}
示例3: 我们还可以通过hasOwnProperty()方法来证明,即使没有声明变量,我们也可以将其分配的值变为window对象的一个属性。
<script>
function check(){
x = "GeeksForGeeks";
}
check();
if(window.hasOwnProperty('x')){
console.log(`x is a Property of Window Object`);
}
</script>
输出:
x is a Property of Window Object
示例4: 我们可以使用 strict 模式, 这是 ECMAScript 5 中的一个新特性,允许将程序或函数放在“严格”操作上下文中。当我们给一个未声明的变量赋值时,它会抛出 Reference error: x is not defined 错误。
<script>
'use strict' // For strict mode
try{
function check(){
x = "GeeksForGeeks";
}
check();
} catch(err){
console.log(err);
}
</script>
输出:
ReferenceError: x is not defined
at check (<anonymous>:5:11)
at <anonymous>:7:5
极客教程