zoukankan      html  css  js  c++  java
  • JavaScript中var的重要性

    在JS中申明变量是使用var来进行申明,但是有的时候我们没有使用var也可以。这是为什么呢?我来给大家细细的说来。


    • var的本质

    var的本质就是来申明变量的

    <script>
    var str = 'China';//申明并进行赋值
    </script>

    • 变量的作用范围

      先以一个例子来说明引出问题,在这个例子中,在函数t中没有使用var关键字来申明变量,系统认为只是进行赋值操作而已,而且这个赋值操作会影响到了window对象的str2属性

    <script>
    var str1 = 'China';//申明并赋值str1
    var str2 = 'Japan';//申明并赋值str2
    console.log(window.str1,window.str2);//输出:China Japan
    function t(){
        var str1 = 'local';//申明并赋值str1
        str2 = 'global';//赋值操作,并不是申明变量,污染window对象的属性
    }
    t();//调用t函数
    console.log(window.str1,window.str2);//输出:China global
    </script>

    • 变量的作用域

    全局作用域:在最外层定义的变量
    局部作用域:在函数内部定义的变量

    JS作用域的特点:首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层,即window对象,并操作window对象的属性。

    <script>
    var str = 'China';
    function t1(){
        var str = 'Japan';
        function t2(){
            var str = 'USA';
            console.log(str);
        }
        t2();
    }
    t1();
    </script>

    这个例子比较典型,可以来说明JS变量的作用域切换问题,脚本首先在最外层定义了str属性,当调用t1函数时,在t1函数中也定义了str变量和t2方法,当执行t2方法时,此时又定义了str变量,所以此时打印USA。
    当屏蔽t2函数中的定义操作,此时在t2函数作用域中没有str变量,则从它的上一级作用域中查找,又因为t1函数中定义了str变量,此时打印Japan。
    当屏蔽t1和t2函数中的定义操作,则一层一层地往外找,此时找到最外层,此时打印China。
    当最外层也没有定义该变量,在运行该JS过程中就找不到该变量,此时会出错,在浏览器的控制台可以找到错误。
    这里写图片描述

  • 相关阅读:
    NetSuite Batch Process Status
    NetSuite generated bank files and the Bank Reconciliation process
    Global Search file content in Gitlab repositories, search across repositories, search across all files
    FedEx Package Rate Integration with NetSuite direct integrate by WebServices
    git Merge branches
    git tag and NetSuite deployment tracking
    API 读写cookie的方法
    C# 生成缩略图
    解决jquery操作checkbox全选全不选无法勾选问题
    JS读取写入删除Cookie方法
  • 原文地址:https://www.cnblogs.com/cnsec/p/13407079.html
Copyright © 2011-2022 走看看