处理程序三要素:

引擎:编译与执行过程。

编译器:语法分析与代码生成等。

作用域:收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。

示例:

var a=2;的解析过程:

1.编译器 询问 作用域 是否已经有该名称的变量

是:忽略该声明,继续执行;

否:声明一个新变量,命名为a;

2.编译器为引擎生成代码

引擎运行首先询问作用域,在当前作用域集合中是否存在一个a的变量:

是:引擎会使用这个变量;

否:引擎继续查找该变量;

  找到了:将2赋值给a。

  没找到:抛出异常。

总结:

变量赋值执行两个动作:

1.编译器声明一个变量;

2.运行时引擎在此作用域中查询(LHS查询)该变量,能找到就赋值。

引擎查询方式:

"L"和"R"分别代码左侧和右侧。什么东西的左侧和右侧?是一个赋值操作的左侧和右侧。

当变量出现在赋值操作的左侧时进行LHS查询,出现在右侧时执行RHS查询。

LHS查询:

1.赋值操作的目标是谁;

2.查找的目的是对变量进行赋值(=操作符或调用函数时传入参数的操作)。

RHS查询:

1.谁是赋值操作的源头;

2.查找的目的是获取变量的值。

报错类型:

ReferenceError异常:

1.严格模式下不成功的LHS(非严格模式下不成功的LHS会导致自动隐藏地创建一个全局变量并不会报异常);

2.不成功的RHS。

TypeError异常:

如果 RHS 查询找到了一个变量,但是你尝试对这个变量的值进行不合理的操作,比如试图对一个非函数类型的值进行函数调用,或着引用 null 或 undefined 类型的值中的属性,那么引擎会抛出另外一种类型的异常。

作用域嵌套规则:

引擎从当前的执行作用域开始查找变量,如果找不到,就向上一级继续查找。

最新文章

  1. javascript的一些bug
  2. WIN7 64位系统下,右下角的声音和电源图标不见的解决办法
  3. 【原】iOS学习43即时通信之XMPP(2)
  4. eclipse中的Console控制台视图脱离主窗口解决办法
  5. PHP包名解释
  6. 搭建maven+spring+mybatis工程
  7. mybatis知识总结
  8. 用free -m查看的结果:
  9. 第201621123043 《Java程序设计》第14周学习总结
  10. Django快速入门
  11. php隐藏手机号指定位数
  12. WPF中元素拖拽的两个实例
  13. appium---第三个脚本,进入评论页,发表评论
  14. 读取excel日期数据问题
  15. JavaScript之表格操作(二)创建表格病填充表格数据
  16. FFT(快速傅里叶变换)摘要
  17. Mysql 将结果保存到文件 从文件里运行sql语句 记录操作过程(tee 命令的使用)
  18. top命令之你不一定懂的cpu显示信息
  19. linux smem 查看各进程使用memory情况
  20. Windows下重置Mysql密码

热门文章

  1. cscope无法索引代码树之外的软链接
  2. vb.net Bitmap Drawing
  3. Android 再按一次退出应用的代码
  4. ant design pro (十六)advanced 权限管理
  5. 实战:sqlserver 日常检查脚本
  6. WPF显示经常使用的几个显示文字控件TextBox, TextBlock, Lable
  7. 配置tomcat的session共享
  8. jquery 入门与知识
  9. 火狐浏览器(firefox)中js要注意的问题
  10. mosquitto ---SSL/TLS 单向认证+双向认证