js:语言精髓笔记6----作用域

js基础语法:由语句、表达式和变量构成;   语句是主要表达方式:单语句->复合语句(代码块)->程序片段(函数);js中没有单元和程序的概念;

作用域:

语法作用域与变量作用域的区别:前者是语法分析阶段对代码块组织结构的理解;后者是代码执行阶段对变量存储的理解;

(有些地方也成为静态作用域和动态作用域)

1.语法作用域

  • 语法作用域的级别:
    • 表达式:
    • 语句:
      • var ....... ;           //语法关键字表示特定行为,省略部分为目标,不能是符合语句;
      • if()..else..;   for()....;  do..while();  while()....;  with().....;     //省略部分可以是单行语句或符合语句;
    • 批语句:
      • switch(){} ;  try{} catch(){} finally{};                    //用{}来限制一段代码块作为它的语法作用域;
    • 函数:
      • function(){};                     //以函数所声明的代码块为作用域;这里可以理解为什么函数声明形式解析后会全部提前,而函数表达式则只是变量名提前的不同;
    • 全局:
  • 语法作用域之间的关系:
    • 平行:
    • 嵌套:
      • 相同级别可以互相嵌套;
      • 高级别可以包含低级,反之不能;
  • 执行流程:
    • 基本流程:顺序执行;
    • 变更:      //break [label]不能跨越函数的语法作用域;
      • 语句:
        • continue/break/continue [label]                  //仅对循环语句构成影响;
        • break [label]                                            //对标签化语句构成影响;
      • 批语句:
        • break                                                    //对多重分支构成影响;
      • 函数:
        • return []                                               //对函数构成影响;
      • 全局:
        • throw.....                                              //对全局代码构成影响;即代码在全局在停止;

 2.变量作用域

  • 变量作用域的级别:
    • 表达式:(直接量)
      • 常量:
      • 变量:js中表达式级别的变量都是匿名的,如匿名函数,对象直接量等;
    • 语句:js并没有语句基本的变量作用域;
    • 函数:常见的局部变量;
    • 全局:常见的全局变量;  //是否使用var对其处理规则是有影响的;
  • 变量生存周期:
    • 创建:
      • 引擎做语法分析,发现显示声明时;
      • 引擎做代码执行,发现试图写(如赋值)一个未被创建的变量时;
    • 释放:
      • 引擎执行到函数结束/退出操作时,将清楚函数内的未被引用的变量;
      • 引擎执行到全局的代码块终结或引擎预载和重新载入时,将清除全局的变量和数据的引用;
原文地址:https://www.cnblogs.com/jinkspeng/p/4078562.html