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过程中就找不到该变量,此时会出错,在浏览器的控制台可以找到错误。
    这里写图片描述

  • 相关阅读:
    SVN
    Oracle用户、权限、角色管理(转)
    X5学习笔记—给单元格添加颜色
    JdbcTemplae使用入门&&Spring三种连接池配置&&Spring配置文件引用外部properties文件
    依赖注入Bean属性
    IoC容器装配Bean(xml配置方式)(Bean的生命周期)
    Spring配置文件的读取
    Spring IoC反转控制的快速入门
    spring security 权限框架原理
    win7 开机,或重启自动启动 该文件下的
  • 原文地址:https://www.cnblogs.com/cnsec/p/13407079.html
Copyright © 2011-2022 走看看