美文网首页
凡是使用别名执行eval,eval内部一律是全局作用域。

凡是使用别名执行eval,eval内部一律是全局作用域。

作者: sunxiaochuan | 来源:发表于2018-08-30 20:19 被阅读0次

    出处

    函数 - JavaScript 教程 - 网道 ---- eval-的别名调用

    代码

    var a = 1;
    
    function f() {
      var a = 2;
      var e = eval;
      e('console.log(a)');
    }
    
    f() // 1
    

    上面代码中,eval是别名调用,所以即使它是在函数中,它的作用域还是全局作用域,因此输出的a为全局变量。这样的话,引擎就能确认e()不会对当前的函数作用域产生影响,优化的时候就可以把这一行排除掉。

    • eval的别名调用的形式五花八门,只要不是直接调用,都属于别名调用,因为引擎只能分辨eval()这一种形式是直接调用。
    eval.call(null, '...')
    window.eval('...')
    (1, eval)('...')
    (eval, eval)('...')
    

    上面这些形式都是eval的别名调用,作用域都是全局作用域。

    相关文章

      网友评论

          本文标题:凡是使用别名执行eval,eval内部一律是全局作用域。

          本文链接:https://www.haomeiwen.com/subject/zjndwftx.html