zoukankan      html  css  js  c++  java
  • 你不知道的JavaScript学习笔记1——作用域

    处理程序三要素:

    引擎:编译与执行过程。

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

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

     

    示例:

    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 类型的值中的属性,那么引擎会抛出另外一种类型的异常。

     

     

    作用域嵌套规则:

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

  • 相关阅读:
    PHPStorm--美化
    Laravel5.1 模型--关联关系(复杂)
    HTML5 getUserMedia/AudioContext 打造音谱图形化
    如何在终端实时展现当前运行的git分支
    关于ionic的跨域问题
    ionic插件安装与卸载
    虚拟机调试ionic项目
    ionic双击退出键退出APP
    npm install 镜像
    对Date的扩展,将 Date 转化为指定格式的String
  • 原文地址:https://www.cnblogs.com/sese/p/7203251.html
Copyright © 2011-2022 走看看