JavaScript 当我们直接赋值给变量而不声明时会发生什么

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程