JavaScript中是否有任何方法可以通过使用字符串格式的名称来调用在另一个函数范围内声明的函数?
请说明在不使JavaScript中是否有任何方法可以通过使用字符串格式的名称来调用在另一个函数范围内声明的函数?,javascript,function,scope,javascript-objects,Javascript,Function,Scope,Javascript Objects,请说明在不使函数成为对象的方法的情况下,是否可以执行以下操作 (function a() { var fun = function() { console.log('abc'); } var x = 'fun'; // call fun using x (How ?) })(); 您可以使用eval。这将以JavaScript代码的形式计算字符串 (函数a(){ var fun=函数(){ console.log('abc'); } var x=‘乐趣’; eval(x)(); })();您
函数成为对象的方法的情况下,是否可以执行以下操作
(function a() {
var fun = function() {
console.log('abc');
}
var x = 'fun';
// call fun using x (How ?)
})();
您可以使用eval
。这将以JavaScript代码的形式计算字符串
(函数a(){
var fun=函数(){
console.log('abc');
}
var x=‘乐趣’;
eval(x)();
})();代码>您可以使用eval
。这将以JavaScript代码的形式计算字符串
(函数a(){
var fun=函数(){
console.log('abc');
}
var x=‘乐趣’;
eval(x)();
})();代码>我总是喜欢使用窗口变量来执行我的函数,而不是使用eval,我还记得有些浏览器在使用eval时会抛出警告。默认情况下,chrome extensions也未启用
在我的例子中,您可以将函数设置为windows全局变量,如下所示:
windows.x = function(){
// do something here
}
windows["x"]()
然后像这样执行它:
windows.x = function(){
// do something here
}
windows["x"]()
我总是喜欢使用window变量来执行我的函数,而不是使用eval,我还记得有些浏览器在使用eval时会发出警告。默认情况下,chrome extensions也未启用
在我的例子中,您可以将函数设置为windows全局变量,如下所示:
windows.x = function(){
// do something here
}
windows["x"]()
然后像这样执行它:
windows.x = function(){
// do something here
}
windows["x"]()
总是有eval
。但它永远不应该用于此。你为什么要这样做,你的目标是什么?总是有eval
。但它永远不应该用于此。你为什么要这样做,你的目标是什么?这不是同一个函数,它是一个副本,但没有相同的闭包(这是你在函数中有一个函数的原因),因此它的行为不匹配,因为它不能访问相同的数据。@Blindman67你在说什么?这里没有复制任何内容eval(x)(
的行为与fun()
@Bergi的行为相同,我想答案是针对这个问题的。“访问封闭函数之外的函数”,并且给定的代码段不是这个答案的意思,因为这是毫无意义的,因为已经有人访问了eval所在的函数。Ok阅读了问题,。他只想从函数内部访问…这不是同一个函数,它是一个副本,但没有相同的闭包(这是您在函数中拥有函数的原因),因此它的行为将不匹配,因为它无法访问相同的数据。@Blindman67您在说什么?这里没有复制任何内容eval(x)(
的行为与fun()
@Bergi的行为相同,我想答案是针对这个问题的。“访问封闭函数之外的函数”,并且给定的代码段不是这个答案的意思,因为这是毫无意义的,因为已经有人访问了eval所在的函数。Ok阅读了问题,。他只想从函数内部访问…这本质上是一个对象的方法,OP要求避免(无论出于何种原因)。当然,使用对象是正确的方法,但使用全局变量确实是错误的。这本质上是对象的一种方法,OP要求避免(无论出于何种原因)。当然,使用对象是正确的方法,但使用全局变量确实是错误的。