2017-10-13 18 views

回答

0

您可以使用eval。这将评估字符串为JavaScript代码。

(function a() { 
 
var fun = function() { 
 
console.log('abc'); 
 
} 
 
var x = 'fun'; 
 

 
eval(x)(); 
 
})();

+0

这不是同一个函数,它是一个副本,但没有相同的闭包(因为在函数中有一个函数),所以它的行为不匹配,因为它不能访问相同的数据。 – Blindman67

+0

@ Blindman67你在说什么?这里没有拷贝'eval(x)()'与'fun()'的表现相同。 – Bergi

+0

@Bergi我认为答案是针对这个问题。 “访问封闭函数外部的函数”,并且给定的片段不是这个答案的意思,因为这是毫无意义的,因为已经可以访问eval所在的函数。 – Blindman67

-1

我总是喜欢使用窗口变量来执行我的功能,而不是使用eval的,我还记得,当你使用eval一些浏览器会引发警告。另外在Chrome扩展中默认情况下不启用。

所以在我的情况下,你可以设置一个功能到Windows全局变量是这样的:

windows.x = function(){ 
    // do something here 
} 

,然后执行它像这样:

windows["x"]() 
+0

这基本上是OP要求避免(不管什么原因)的对象的一种方法。当然,使用对象将是正确的方式,但使用全局变量实际上是错误的。 – Bergi

相关问题