javascript - eval 调用函数,函数又调用定义函数的 eval

标签 javascript scope eval

我知道标题听起来很复杂,但为了保持动态,这是有目的的;)

示例(请注意,假定这些示例代码位于外部 eval 内)

//Ex1 this works
eval('function test (){}');
test();

//Ex2 this doesn't work (myfunction definition is written below)
myfunction();
test(); //I get an error

如果我全局定义 myfunction(在外部 eval 之外),我会收到此错误:对象不是函数

如果我在外部 eval 中定义了 myfunction,我会收到此错误:对象不是函数

//myfunction definition
function myfunction () {eval('function test (){}');}

问题是:如何将函数定义的范围扩展到其定义的函数之外?我知道如何使 eval 成为全局的(请参阅下面的替代 myfunction),但这似乎有点矫枉过正,我只想将范围扩大到外部 eval 而已。这可能吗?

更新: 这些示例仅定义一个函数以保持简单,但我希望对其进行扩展,以便 myfunction 定义许多函数,并且它定义的函数是动态的,具体取决于其他因素。我还希望保留函数名称和定义。如果我除了全局调用 eval 之外找不到其他解决方案,我最终可能只是将 myfunction 的内容放入外部 eval 中,然后我必须将内容复制到使用它的每个地方。

//making eval global works, but I had hoped to just upscope to the calling eval
function myfunction(){var globaleval=eval;globaleval('function test(){}');}

自最初的问题以来已对以下内容进行了编辑: 也许你可以在外部 eval 中创建一个 var,让 myfunction 将函数定义的地址返回给该 var。但是,我希望保留函数名称和定义。

最佳答案

好吧,所以我假设您实际上是想控制 eval 使用的范围...

为什么不

eval.call(context, 'function test(){}');

示例

eval.call(window, 'function test(){}');

关于javascript - eval 调用函数,函数又调用定义函数的 eval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20434091/

相关文章:

python - 用于列表反序列化的 Python 'eval' 的安全性

r - `[.` `ReferenceClass` 方法

javascript - 使用 jquery 将按钮文本初始化为日期值

javascript - d3(或 JavaScript): use local variable in another function

javascript - storing in proto 和 this 有什么区别?

JavaScript:用括号括住逗号分隔值

javascript - if 语句头中声明的函数随后未定义

Bash - 如何避免命令 "eval set --"评估变量

javascript - 在文本输入字段中键入内容时,打印内容替换点

javascript - AS3 Flash - 通过 ExternalInterface 呈现 html