一、什么是词法作用域?

词法作用域是在定义词法阶段的作用域,就是由代码变量和作用域块写在哪里决定的,基本上词法分析器在处理代码时会保持作用域不变。

二、词法作用域特点

  • 完全由写代码期间函数所声明的位置来定义

  • 词法作用域查找只查找一级标志符(foo.bar.baz,只试图查找foo标志符)

三、如何运行时修改词法作用域?

  1. eval()

    function foo(str,a){
    eval(str) //会修改foo函数的词法作用域
    console.log(a,b)
    }
    var b = 2;
    foo('var b = 3;',1); // 1,3

    在严格模式中eval(),有自己的词法作用域

  2. with 中var声明会会被添加到with所处的作用域中,并未参数对象创建了一个全新的词法作用域

eval()和with 会在运行时修改作用域,这样破坏了js引擎在编译阶段根据词法进行静态分析的能力,所有大量的使用会影响代码性能

四、 javaScript 的作用域

  • 函数作用域

函数作用域值属于这个函数的全部变量都可以在整个函数的范围内使用及复用。

函数表达式IIFE: (function foo(){})(),可用于防止污染全局作用域

  • 全局作用域

  • 块级作用域

    with

    try/catch (ES3)

    let (ES6)

    const

五、总结

javaScript 遵循词法作用域规则,目前有的作用域有全局作用域,函数作用域以及块级作用域,其中函数作用域是最常见的作用域单元。一般情况下词法作用域在编译阶段就已经确定,如果在运行时修改词法作用域会影响代码的运行的性能。

最新文章

  1. 理解数据库的PDO处理的理念
  2. 如何得到自定义UITableViewCell中的按钮所在的cell的indexPath.row
  3. 【以前弄的老东西】DLLspy超犀利后门 (源代码+程序+使用手册+二次开发文档)
  4. Verilog之电平检测
  5. Memcache入门
  6. HazelCast 的内存管理原理
  7. 3[doses] ------一种诡异的写法
  8. [liu yanling]测试方法
  9. SQL Server 查看对象之间的引用关系
  10. 【Qt开发】修改源码文件的编码格式的小技巧 .
  11. 推荐三个 VSCode 摸鱼插件
  12. c++屏蔽Win10系统快捷键
  13. 如何使用RSS
  14. A1123. Is It a Complete AVL Tree
  15. sap 查看自己代码的结构
  16. Vivado中ILA的使用
  17. AWK 知识库
  18. hdu 2642
  19. python之函数嵌套与闭包
  20. [codeup] 2044 神奇的口袋

热门文章

  1. ES6 - 基础学习(1): 开发环境搭建
  2. 来简单说说var,let,const,function,import,class
  3. P2214 [USACO14MAR]哞哞哞Mooo Moo
  4. go 网络编程
  5. python 复习 day1
  6. java.lang.ClassCastException:java.util.LinkedHashMap不能转换为com.testing.models.xxx
  7. 【spring boot】SpringBoot初学(9.1)– 简单配置corsFilter对跨域请求支持
  8. if、counf、countif、countifs、sumif、sumifs
  9. 重启监听卡在connecting to的问题
  10. 双向链表的简单Java实现-sunziren