有没有什么方法可以在JavaScript中调用在另一个函数的作用域内声明的函数?
请告诉下方是否有可能不要使function fun
成为对象的方法。有没有什么方法可以在JavaScript中调用在另一个函数的作用域内声明的函数?
(function a() {
var fun = function() {
console.log('abc');
}
var x = 'fun';
// call fun using x (How ?)
})();
您可以使用eval
。这将评估字符串为JavaScript代码。
(function a() {
var fun = function() {
console.log('abc');
}
var x = 'fun';
eval(x)();
})();
这不是同一个函数,它是一个副本,但没有相同的闭包(因为在函数中有一个函数),所以它的行为不匹配,因为它不能访问相同的数据。 – Blindman67
@ Blindman67你在说什么?这里没有拷贝'eval(x)()'与'fun()'的表现相同。 – Bergi
@Bergi我认为答案是针对这个问题。 “访问封闭函数外部的函数”,并且给定的片段不是这个答案的意思,因为这是毫无意义的,因为已经可以访问eval所在的函数。 – Blindman67
我总是喜欢使用窗口变量来执行我的功能,而不是使用eval的,我还记得,当你使用eval一些浏览器会引发警告。另外在Chrome扩展中默认情况下不启用。
所以在我的情况下,你可以设置一个功能到Windows全局变量是这样的:
windows.x = function(){
// do something here
}
,然后执行它像这样:
windows["x"]()
这基本上是OP要求避免(不管什么原因)的对象的一种方法。当然,使用对象将是正确的方式,但使用全局变量实际上是错误的。 – Bergi
总是有'eval'。但它永远不应该用于这个。你为什么要这么做,你的[实际问题](https://meta.stackexchange.com/q/66377)是什么? – Bergi