eval()关键字究竟如何中断javascript中的编译器优化

不,我是
function func1(str) {
  eval(str);
  newVar = 100;
  function func2() {
     console.log(bar);
     console.log(newVar);
  }
  func2();
}

func1("bar = 42;");

我读过应该避免使用eval()关键字,因为它欺骗了词法作用域(这导致代码运行更慢)。在上述示例(或任何其他示例拥有的上下文)的上下文中,我试图了解哪种编译器优化可能最终会中断。

看这行newVar = 100; 该变量也将由引擎(在全局范围内)在执行阶段创建。我认为这并不意味着“欺骗”词汇范围。那么eval(“ bar = 42;”)的实质问题是什么呢?希望问题清楚。

亨利700

因为它们是编译器优化,所以传递给eval的代码几乎必须进行解释

在您的情况下,现代引擎可能足够聪明,可以认识到它是字符串文字并进行相应的优化,但是仍然会创建新的执行上下文,并且浪费了函数调用。普通程序使用eval所做的几乎每件事,都可以在没有eval的情况下完成

function func1(value)
{
  var bar = value;
  var newVar = 100;
  function func2() {
     console.log(bar);
     console.log(newVar);
  }
  func2();
}

func1(42);

编辑:其实,让我们更深入。在上面的代码中,没有任何状态bar会在到达console.log(bar);部分代码时被定义而且它永远是数字。实际上,它始终是42。假设引擎具有完善的优化算法,如果所评估代码的输入是动态的(例如来自AJAX答复或某种形式的用户输入),这是否同样适用?并非总是如此和优化总是需要SURE他们承担削减最终代码的东西。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++ inline关键字和编译器优化

来自分类Dev

闭包编译器触发“ final”关键字

来自分类Dev

编写C编译器时应如何解析关键字?

来自分类Dev

C中的关键字/编译器选项,保证不会重叠不同的指针

来自分类Dev

编译器是否更有可能在指定了inline关键字的类声明中内联函数?

来自分类Dev

编译器在调用基类构造函数之前会在子类构造函数中寻找** super **关键字吗?

来自分类Dev

为什么C ++编译器允许将extern关键字与定义结合使用?

来自分类Dev

可以由编译器推断“ package”关键字的目的是什么?

来自分类Dev

将Task.Run与async / await关键字混合时,奇怪的编译器行为

来自分类Dev

所有C ++编译器都支持async / await关键字吗?

来自分类Dev

为什么无痛编译器抱怨`new`关键字?

来自分类Dev

闭包编译器 es6 let 关键字

来自分类Dev

node / javascript()()语法-究竟如何工作?

来自分类Dev

NOT EXISTS在SQL中究竟如何工作?

来自分类Dev

在Java编译器中,System.out.print中的打印可以定义为标识符或关键字?

来自分类Dev

当在带有变量声明的函数中重用struct关键字时,为什么编译器没有抱怨?

来自分类Dev

in`关键字在迭代器中如何工作?

来自分类Dev

究竟如何运作?

来自分类Dev

C关键字中断

来自分类Dev

C关键字中断

来自分类Dev

如何在Javascript中定义关键字?

来自分类Dev

如何避免Javascript中的this和new关键字?

来自分类Dev

为什么编译器不优化中断代码?

来自分类Dev

如果旧的C ++编译器未实现新的关键字,那么将其定义为错误吗?

来自分类Dev

保留关键字不会在Xcode 4.6 ARC项目中引发编译器错误?

来自分类Dev

编译器如何优化模板?

来自分类Dev

GraalVM:如何实现编译器优化?

来自分类Dev

R中的字节编译器优化

来自分类Dev

在SBCL中检查编译器优化

Related 相关文章

  1. 1

    C ++ inline关键字和编译器优化

  2. 2

    闭包编译器触发“ final”关键字

  3. 3

    编写C编译器时应如何解析关键字?

  4. 4

    C中的关键字/编译器选项,保证不会重叠不同的指针

  5. 5

    编译器是否更有可能在指定了inline关键字的类声明中内联函数?

  6. 6

    编译器在调用基类构造函数之前会在子类构造函数中寻找** super **关键字吗?

  7. 7

    为什么C ++编译器允许将extern关键字与定义结合使用?

  8. 8

    可以由编译器推断“ package”关键字的目的是什么?

  9. 9

    将Task.Run与async / await关键字混合时,奇怪的编译器行为

  10. 10

    所有C ++编译器都支持async / await关键字吗?

  11. 11

    为什么无痛编译器抱怨`new`关键字?

  12. 12

    闭包编译器 es6 let 关键字

  13. 13

    node / javascript()()语法-究竟如何工作?

  14. 14

    NOT EXISTS在SQL中究竟如何工作?

  15. 15

    在Java编译器中,System.out.print中的打印可以定义为标识符或关键字?

  16. 16

    当在带有变量声明的函数中重用struct关键字时,为什么编译器没有抱怨?

  17. 17

    in`关键字在迭代器中如何工作?

  18. 18

    究竟如何运作?

  19. 19

    C关键字中断

  20. 20

    C关键字中断

  21. 21

    如何在Javascript中定义关键字?

  22. 22

    如何避免Javascript中的this和new关键字?

  23. 23

    为什么编译器不优化中断代码?

  24. 24

    如果旧的C ++编译器未实现新的关键字,那么将其定义为错误吗?

  25. 25

    保留关键字不会在Xcode 4.6 ARC项目中引发编译器错误?

  26. 26

    编译器如何优化模板?

  27. 27

    GraalVM:如何实现编译器优化?

  28. 28

    R中的字节编译器优化

  29. 29

    在SBCL中检查编译器优化

热门标签

归档