猿问

关于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


jeck猫
浏览 913回答 1
1回答

茅侃侃

做不到。eval在JavaScript中有两种调用方式:直接调用和间接调用。直接调用时:eval内代码块的作用域绑定到当前作用域。间接调用时:eval内代码块的作用域绑定到全局作用域。换句话说,eval在间接调用时,就不遵守JavaScript词法环境的规则了。你的代码实质上是用了eval的间接调用方式,而又想让它访问当前作用域中的变量,是不可能的。所以你必须改变代码的写法。参考:10.4.2 Entering Eval Code
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答