为什么尽量不要使用eval函数和with关键字

版权声明:内容多为自言自语,请自行判断有无价值。 https://blog.csdn.net/weixin_41702247/article/details/82810183
编译过程:分词/词法分析;解析/语法分析;代码生成

词法作用域:定义在词法阶段的作用域


相关概念:

    作用域:是一套规则,定义了引擎如何在作用域中通过标识符名称对变量进行查找
    作用域工作模型:词法作用域、动态作用域
    词法化:编译器工作的第一阶段,即对代码中的字符进行检查。如果是有状态的解析还会赋予单词语义

1.性能问题:

①.js引擎会在编译阶段进行性能优化,其中部分优化依赖于对词法作用域的静态分析;

②.eval函数和with关键字会欺骗词法作用域(eval动态修改,with凭空创建新的),从而导致词法作用域中变量和函数的定义位置无法事先确定;

③.js引擎发现代码中的eval和with后,会判别无法事先做优化,故直接放弃

2.严格模式下不允许使用:"use strict"

3.网络安全问题:

eval()会将接收的字符串解析为js代码,容易被恶意植入

(详情不作展开,暂不了解)

猜你喜欢

转载自blog.csdn.net/weixin_41702247/article/details/82810183