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

编译过程:分词/词法分析;解析/语法分析;代码生成

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


相关概念:

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

1.性能问题:

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

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

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

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

3.网络安全问题:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值