预解析、预处理

1. 在全局代码执行之前,js 引擎 就会创建一个栈来存储管理所有的 执行上下文对象

2. 在 全局执行上下文 window 确定以后,进行压栈

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

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

5. 当所有的代码执行完以后,栈中只剩下 window

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

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



  • 当 函数名 与 变量名 相同时,变量名 将被忽略________但是要注意赋值操作,具体情况,具体分析
  • 一定要注意 变量声明 提升
  • 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 表示正在执行的函数对象。

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

  1. c语言学习之基础知识点介绍(二十):预处理指令

    一.预处理指令的介绍 预处理命令:在编译之前触发的一系列操作(命令)就叫预处理命令. 特点:以#开头,不要加分号. #include: 文件包含指令 把指定文件的内容复制到相应的位置 #define: ...

  2. (52)Wangdao.com第七天_字面量/变量_标识符_数据类型_数据的存储

    JavaScript 字面量 和 变量 字面量:就是那些不可变的值,如1,2,100,2000,Infinity,NaN 变量: 变量,代表的当前随机分配的内存地址. 变量的值,是可变的,可以用来保存 ...

  3. 轻奢请向历史SAY NO_重青网_重庆青年报_重庆青年报电子版_重庆青年报网站_重庆青年报官方网站

    轻奢请向历史SAY NO_重青网_重庆青年报_重庆青年报电子版_重庆青年报网站_重庆青年报官方网站 轻奢请向历史SAY NO 经济学家George Taylor在他著名的"裙摆指数" ...

  4. 易语言关于使用CURL,网页_访问,网页_访问S,网页_访问_对象,鱼刺(winHttpW)发送Get性能测试

    易语言关于使用 CURL,网页_访问,网页_访问S,网页_访问_对象,鱼刺(winHttpW)发送Get性能测试 测试模块情况: |-精易模块5.8  |-鱼刺类Http  |-libCURL +++ ...

  5. Alink漫谈(十八) :源码解析 之 多列字符串编码MultiStringIndexer

    Alink漫谈(十八) :源码解析 之 多列字符串编码MultiStringIndexer 目录 Alink漫谈(十八) :源码解析 之 多列字符串编码MultiStringIndexer 0x00 ...

  6. Alink漫谈(十九) :源码解析 之 分位点离散化Quantile

    Alink漫谈(十九) :源码解析 之 分位点离散化Quantile 目录 Alink漫谈(十九) :源码解析 之 分位点离散化Quantile 0x00 摘要 0x01 背景概念 1.1 离散化 1 ...

  7. C++_系列自学课程_第_8_课_指针和引用_《C++ Primer 第四版》

    C语言最富有迷幻色彩的部分当属指针部分,无论是指针的定义还是指针的意义都可算是C语言中最复杂的内容.指针不但提供给了程序员直接操作硬件部分的操作接口,还提供给了程序员更多灵活的用法.C++继承这一高效 ...

  8. C++_系列自学课程_第_6_课_bitset集_《C++ Primer 第四版》

    在C语言中要对一个整数的某一个位进行操作需要用到很多的技巧.这种情况在C++里面通过标准库提供的一个抽象数据类型 bitset得到了改善. 一.标准库bitset类型 1.bitset的作用 bits ...

  9. Demo02_对结构体进行文件读写_张仕传_作业_

    #include <iostream> using namespace std; #define StructArrarySize 5 // 老师数量 #define StudentNum ...

随机推荐

  1. Maven 学习总结 (二) 之 生命周期与插件

    五.生命周期与插件 1.Maven有三套独立的生命周期:clean.default和site. clean生命周期的目的是清理项目,default生命周期的目的是构建项目,site生命周期的目的是建立 ...

  2. npm常用命令学习(npm install -D,semver版本规范, npm进行版本管理的最佳实践用法)

    什么是npm npm有两层含义.一层含义是Node的开放式模块登记和管理系统,网址为npmjs.org.另一层含义是Node默认的模块管理器,是一个命令行下的软件,用来安装和管理Node模块. npm ...

  3. John von Neumann和Ulam

    John von Neumann和Ulam是好朋友,两人经常在一起喝酒.旅行.谈女人.有一次诺伊曼认出身边的一位女士,他们交谈了几句.随后他给Ulam介绍那是他的一位老朋友,刚刚离婚.Ulam就问:那 ...

  4. sql 发送邮件

    一.启用Database Mail XPs功能. 查看Database Mail XPs功能是否打开,从返回结果来看,value为0说明没有打开,注意SQL Mail XPs是SQL Server早期 ...

  5. 程序设计-理解java继承-遁地龙卷风

    (0)写在前面 编程和现实世界是息息相关的,你是如何理解现实世界中的继承呢? 继承在编程中应理解为:对父类资源(本文只讨论方法)的使用,父类方法只提供类基本的功能,父类方法之间不存在调用关系. (1) ...

  6. 软件模拟I2C通讯

    I2C协议概述,有相当详细的名词解释: 通信数量受限于地址空间和400Pf总线电容. 所有的数据传输过程中,SDA线的电平变化必须在SCL为低电平时进行,SDA线的电平在SCL线为高电平时要保持稳定. ...

  7. (一)Java工程化--Maven基础

    Maven 读作['mevən] 翻译成中文是"内行,专家" Maven是什么 包依赖的前世今生: 原始的jar包引用--> ant --> maven. 是一种项目管 ...

  8. android dialog设置全屏半透明背景色

    style代码如下: <style name="theme_dialog" parent="@android:style/Theme.Dialog"> ...

  9. 一文掌握 Linux 性能分析之内存篇

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 前面我们已经学 ...

  10. 往服务器部署thinkphp5代码时要注意 pathinfo的问题

    往服务器部署thinkphp5代码时要注意 pathinfo的问题 如果nginx没有做任何设置 要使用?s=/的方式访问地址 只需要修改3个地方就可以了,亲测成功,看代码有注解 location ~ ...