美文网首页
凡是使用别名执行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内部一律是全局作用域。

    出处 函数 - JavaScript 教程 - 网道 ---- eval-的别名调用 代码 上面代码中,eval是...

  • JS的作用域

    JS的作用域: 全局作用域、函数作用域、eval 作用域、块级作用域 全局作用域: 函数作用域: 结果截屏: 说...

  • 避免使用eval及with

    JavaScript中有两个可以破坏作用域的函数eval和with eval 上面代码运行后直接会修改全局作用域中...

  • 7、运行时求值

    用eval()方法进行求值 eval()方法将执行传入的代码的字符串,并在调用eval()方法的作用域内进行代码求...

  • JS中eval()解析和为什么不要使用eval

    eval翻译:是evaluate,评估,评价的意思。eval的重点在于eval函数名赋值给变量之后,它的作用域可能...

  • 面经之js

    1.eval是做什么的?为什么尽量避免使用eval? Javascript全局对象,eval()函数可以计算机某个...

  • 2018-01-15

    延长作用域链~~with、eval、try-catch

  • eval作用域

    输出 原因: (1,eval)是个表达式,;类似1&&eval,属于间接引用了eval; eval 只在被直接调用...

  • 你不知道的 Javascript

    作用域 词法作用域:编译阶段确定(欺骗词法作用域 eval with) 块作用域 with try/catch l...

  • eval()与括号运算符(个人学习笔记)

    eval()作用: 把字符串中的内容当作JavaScript语句执行。 eval( "25+...

网友评论

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

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