目录

  • 一、JS的解析与执行过程

    • 预处理阶段
    • 执行阶段
  • 二、作用域

    • 块作用域
    • 函数作用域
    • 动态作用域
    • 词法作用域
  • 三、闭包

    • 什么是闭包
    • 闭包的好处
  • 四、函数与对象

    • 对象
    • 函数

    •  

      原型(prototype)

    •  

      this

    •  

      new的理解

  • 五、封装

  • 六、继承

  • 七、多态

  • 八、项目实战minijQuery

一、JS的解析与执行过程

1.1、预处理阶段

注意:js预处理阶段会扫描所有var声明的变量,把var声明的变量或函数存放到词法作用域里,如果是变量初始值为“undefined”,如果是函数则指向函数;

全局(window)

  词法作用域(Lexical Environment)顶级的Lexical Environment是window;

  1、先扫描函数声明后扫描变量(var声明);

  2、处理函数声明有冲突,会覆盖;处理变量声明时有冲突,会忽略。

函数

  词法作用域(Lexical Environment):每调用一次,产生一个Lexical Environment;

  1、先函数的参数:比如arguments(函数内部对象,代表函数实参,可通过下标获取调用函数时传的实参)

  2、先扫描函数声明后扫描变量(var声明);

  3、处理函数声明有冲突,会覆盖;处理变量声明时有冲突,会忽略。

 

1.2、执行阶段

  1、给预处理阶段的成员赋值

  2、如果没有用var声明的变量,会成为最外部LexicalEnvironment的成员(即window对象的变量)

 

函数内部对象:arguments

<script>
    /*提示:*/
    // arguments是每一个函数内部的一个对象
    // 可以访问实际传递给函数的参数的信息。
    // 声明的时候参数的个数与实际调用时无关
    
    function add(a,b){
    console.log(add.length);// 形参的个数
    console.log(arguments.length);// 实际传过来的参数
    var total = 0;
    for(var i = 0;i< arguments.length;i++){
        total += arguments[i];
    }
    return total;// 返回实参的总和
    }
    
    // 调用时传的实参
    var result = add(1,2,3,4,5);
    var result2 = add(1,2);
    
    console.log(result);// 15
    console.log(result2);// 3
</script>
View Code

相关文章: