(63)Wangdao.com第十天_预处理、预解析_函数 上下文对象、参数列表对象

预解析、预处理html

1. 在全局代码执行以前,js 引擎 就会建立一个栈来存储管理全部的 执行上下文对象数组

2. 在 全局执行上下文 window 肯定之后,进行压栈安全

3. 在 函数执行上下文对象 肯定之后,进行压栈函数

4. 当 函数 执行完,进行 出栈 操做this

5. 当全部的代码执行完之后,栈中只剩下 windowspa

注意: 当栈中含有多个 函数上下文对象 ,则表示当前在执行嵌套函数。prototype

产生的上下文对象 个数 = n  + 1个全局上下文对象code



  • 当 函数名 与 变量名 相同时,变量名 将被忽略________可是要注意赋值操做,具体状况,具体分析
  • 必定要注意 变量声明 提高
  • js 引擎 在将要执行全局代码以前,建立一个全局执行上下文对象 window
  • 将 var 关键字声明的变量,添加为 window 的属性,值为 undefined
  • 将 function 关键字什么的函数,添加为 window 的方法,值为 函数体
  • 肯定全局 this 指向 为 window
  • js 引擎 在将要执行函数代码以前,建立一个函数执行上下文对象 (没办法直接操做)
  • 将 var 关键字声明的变量,添加为 函数执行上下文对象 的属性
  • 将 function 关键字声明的函数,添加为 函数执行上下文对象 的方法
  • 将实参赋给形参,添加为 函数执行上下文对象的属性
  • 将传入的实参添加到 arguments 对象中,并将 arguments 添加为 函数执行上下文对象 的属性
  • 解析器在每次调用函数时,都会传递两个隐含参数(this上下文对象,arguments 参数列表):
  • this    上下文对象
    • 根据函数调用方式的不一样,this 指向不一样的对象
      • 看成为普通函数调用时,this 指向全局对象 window
      • 看成为对象的方法被调用时,this 指向调用该方法的对象
      • 看成为构造函数调用时,this 指向建立的新对象
    • 构造函数
      • 出现的缘由:因为目前为止,咱们的对象都是用 new Object() 建立的,因此都是 Object 类的对象,很差区分。。。最好有个 Person 类,Animal 类
      • new Person()只要出现 new 就会在堆内存建立一个对象。
        • 这就是是一个构造函数,习惯上首字母大写。
        • 建立时,和普通函数没什么区别,即 function Person(){} 便可。只是用的时候加了 new 就是构造函数了。
      • 返回值为所建的对象。
      • 使用同一构造函数建立的对象,称为一类对象。。。构造函数称为。。。建立的对象称为该类的实例
    • function Person(name,gender,age){
          this.name = name;
          this.gender = gender;
          this.age = age;
          this.sayName = function(){
              document.write("我叫"+this.name);
          };
      }
      
      var ts = new Person("唐僧","男",27);
      ts.sayName();
      
      // 使用 instanceof 能够检查 一个对象是不是某个类的实例
      console.log(ts instanceof Person);    // 固然返回 true
      // xxx instanceof Object        永远返回 true ,由于全部对象都是 Object 的派生类
       
    • 因为构造函数没执行一次就会建立一个新的方法,若是执行1000次就会建立1000个方法,这些方法彼此相同。这1000个方法彻底能够共用一个方法
      • 解决方法1,在全家做用域中定义方法,再赋予构造函数
      • 上面方法带来的新问题是:污染了全局做用域的命名空间,并且很不安全。
      • 因而, prototype 原型对象 完美解决了这个问题

 

  • arguments 参数列表对象
    • 在调用函数时,参数都会保存到 arguments 对象中。
    • 不是数组,可是可使用 arguments.length 来获取参数个数。
    • 对于参数的访问也是用 [数字索引] 的方式来操做数据。
    • 因此即便不定义形参,也能够用 arguments 来接收并使用传递过来的实参。
    • arguments.callee 表示正在执行的函数对象。
相关文章
相关标签/搜索