如何给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
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
做不到。
eval在JavaScript中有两种调用方式:直接调用和间接调用。直接调用时:eval内代码块的作用域绑定到当前作用域。
间接调用时:eval内代码块的作用域绑定到全局作用域。
换句话说,eval在间接调用时,就不遵守JavaScript词法环境的规则了。
你的代码实质上是用了eval的间接调用方式,而又想让它访问当前作用域中的变量,是不可能的。所以你必须改变代码的写法。
参考:10.4.2 Entering Eval Code
这个问题关键在于 js作用域是词法作用域, 不是动态作用域 也就是调用te的环境里的
var left = {}是不能被识别到的...相反定义te的环境的left才能识别, 本问题定义te在全局作用域.
这样就可以了
如果你不想有全局的变量left
可以考虑这样
可以试试
new Function,