javascript - 关于js中eval的作用域的问题

查看:100
本文介绍了javascript - 关于js中eval的作用域的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如何给eval设置正确的作用域?
我想让eval能够取得当前函数中的变量。


function test(){
  var left = {}
  te('left.top=456')  //报错left undefined
  return left
}

function te(str){
   eval(str)  
}

var a = test();

注意:eval必须要在另一个函数上,就是不能在test()中直接写eval

解决方案

做不到。

eval在JavaScript中有两种调用方式:直接调用间接调用

  • 直接调用时:eval内代码块的作用域绑定到当前作用域。

  • 间接调用时:eval内代码块的作用域绑定到全局作用域。

换句话说,eval在间接调用时,就不遵守JavaScript词法环境的规则了。

你的代码实质上是用了eval的间接调用方式,而又想让它访问当前作用域中的变量,是不可能的。所以你必须改变代码的写法。

参考:10.4.2 Entering Eval Code

这篇关于javascript - 关于js中eval的作用域的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆