• 作用域属性是在定义函数的时候决定的,不是在调用函数的时候决定。

  • JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里。

  • eg.

    var name = "lw";
    
    function alert_1 () {
    
      alert(name);
    
    }
    
    function alert_2 () {
    
     var name = "zgm";
    
     alert_1();
    
    }
    
    alert_2();// 结果:lw

js的预编译:

  • 在一段js代码执行之前,会预先处理var关键字和function定义式(函数表达式和函数定义式),对于局部变量,变量的值会在真正执行的时候计算。

  • 函数定义注意:函数定义式和函数表达式的不同, 对于函数定义式, 会将函数定义提前.而函数表达式, 会在执行过程中才计算。

  • eg.

    alert(typeof hello);//结果:function
    
    alert(typeof world);//结果:undefined
    
    function hello(){ //函数定义式
    
       alert("hello");
    
    }
    
    var world=function(){ //函数表达式
    
      alert("world");
    
    }
    
    alert(typeof world);//结果:function
  • js预编译是以段为处理单元

    <script>
    
    alert(typeof hello); //结果:undefined
    
    </script>
    <script>
    
    function hello() {
    
     alert('hello world');
    
    }
    
    </script>
  • 作用域链代码优化在标识符解析的时候,查找全局变量是最慢的,所以尽量使用局部变量。

    function changeColor(){
    
      var doc=document;
    
    doc.getElementById("NM").onclick=function(){
        doc.getElementById("AL").style.backgroundColor="red";
    
      };
    
    }
  • 全局变量document的被调用两次,查找该变量必须遍历整个作用域链,耗费时间,可以把它存储到局部变量里再使用。


刘雯
58 声望10 粉丝

爱前端的kcoder


« 上一篇
Ajax笔记