
你不知道的javascript-上卷-第一部分作用域和闭包 第2章 词法作用域
发布日期:2021-05-14 11:07:11
浏览次数:18
分类:精选文章
本文共 770 字,大约阅读时间需要 2 分钟。
2.1 词法作用域
词法作用域是指在编译阶段(词法分析阶段)写入代码时确定的作用域。它是根据变量和块的书写位置决定的,编译器在处理代码时会基于词法结构保持作用域不变。
2.2 欺骗词法 - 不推荐使用:eval 和 with
在运行时如何修改或创建词法作用域?JavaScript 提供了两种机制:eval 和 with。
eval modify its surrounding lexical scope
eval函数将传入的字符串当作代码执行。例如:
function foo(str, a) { eval(str); // 欺骗! console.log(a, b);}var b = 2;foo("var b = 3;", 1); // 输出 "1, 3"
eval 执行的代码在运行时动态修改了周围的词法作用域。
with 创建全新的词法作用域
function foo(obj) { with(obj) { a = 2; }}var o1 = {a:3}, o2 = {b:3};foo(o1); console.log(o1.a); // 2foo(o2); console.log(o2.a); // undefinedconsole.log(a); // 2
with 通过动态创建新的词法作用域,重定向变量查找。
2.3 性能考量
eval 和 with 都会导致编译器无法在编译阶段对标识符位置进行优化,最终影响运行速度。
由于 JavaScript 引擎的优化依赖于词法分析,这两种机制会使优化无效,严重影响性能。
总结
词法作用域决定了变量查找的规则。eval 和 with 可以动态修改词法作用域,但因为其对性能的负面影响,最佳实践是避免使用它们。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月06日 11时12分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
pycharm使用(新建工程、字体修改、调试)
2019-03-11
什么是Numpy、Numpy教程
2019-03-11
Python学习笔记——元组
2019-03-11
异常声音检测
2019-03-11
PCB学习笔记——AD17如何添加新的封装
2019-03-11
numpy版本问题
2019-03-11
无法打开文件“opencv_world330d.lib”的解决办法
2019-03-11
maven项目通过Eclipse上传到svn上面,再导入到本地出现指定的类找不到的问题
2019-03-11
maven 项目部署到tomcat下 没有class文件
2019-03-11
算法训练 未名湖边的烦恼(递归,递推)
2019-03-11
算法训练 完数(循环,数学知识)
2019-03-11
什么是接口
2019-03-11
2020版nodejs12.18.3安装配置教程
2019-03-11
iview组件库中,Form组件里的Input,无法正确绑定on-enter事件
2019-03-11
记录-基于springboot+vue.js实现的超大文件分片极速上传及流式下载
2019-03-11
JavaScript高级程序设计第四版学习记录-第九章代理与反射
2019-03-11
怎么解决Windows 10文件/文件夹正在使用无法删除
2019-03-11