【发布时间】:2013-12-07 11:37:24
【问题描述】:
我知道标题听起来令人费解,但为了保持动态,这是有目的的;)
示例(请注意,这些示例代码假定在外部 eval 中)
//Ex1 this works
eval('function test (){}');
test();
//Ex2 this doesn't work (myfunction definition is written below)
myfunction();
test(); //I get an error
如果我在全局范围内(外部 eval 之外)定义了 myfunction,则会收到此错误:对象不是函数
如果我在外部 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存在明显的问题,但我想知道如果您定义一个名为bla的函数,test()不起作用,您会感到惊讶。除了范围界定问题。 -
只有我一个人不明白你想要达到的目标吗?
-
关于指向函数的指针是什么意思?是的,内部有指针,有时在谈论 Javascript 的某些方面时使用该词是有道理的,但不是你如何/在哪里使用它。顺便说一句,你甚至错了——如果你使用变量来分配函数表达式而不是使用函数声明,那么你可以在分配函数之前很好地定义变量。然后你就会有你的“函数指针”(它会在最终分配后指向一个函数)。
标签: javascript scope eval