手记

JS中变量声明及作用域详解

  1. 变量声明
    JS中变量申明分显式申明和隐式申明。
      var i=100;//显式申明(会进行预编译)
      i=100;//隐式申明(解释时才会被声明为全局变量)
      在函数中使用var关键字进行显式申明的变量是做为局部变量,而没有用var关键字,使用直接赋值方式声明的是全局变量。  
      当我们使用访问一个没有声明的变量时,JS会报错。而当我们给一个没有声明的变量赋值时,JS不会报错,相反它会认为我们是要隐式申明一个全局变量,这一点一定要注意。
  2. 全局变量和局部变量
    当JS解析器执行时,首先就会在执行环境里构建一个全局对象,我们定义的全局属性就是做为该对象的属性读取,在顶层代码中我们使用this关键字和window对象都可以访问到它。而函数体中的局部变量只在函数执行时生成的调用对象中存在,函数执行完毕时局部变量即刻销毁。因此在程序设计中我们需要考虑如何合理声明变量,这样既减小了不必要的内存开销,同时能很大程度地避免变量重复定义而覆盖先前定义的变量所造成的Debug麻烦。
    3.局部变量会提前初始化,假如已经声明全局变量A,同时在function()方法中声明局部变量A,那么局部变量A的值会覆盖全局变量A的值.如下代码所示
<script language="javascript" type="text/javascript">
        var a = "change";

        function fun() {
            alert(a); //输出undefined
            var a = "改变了";
            alert(a); //输出改变了
        }
        alert(a); //输出change
        fun();
    </script>
10人推荐
随时随地看视频
慕课网APP