【发布时间】:2011-01-24 20:37:40
【问题描述】:
更新 2:
我真正想问的问题已经在另一页讨论过了。请检查以下条目。
(感谢BobS。)
How can I access local scope dynamically in javascript?
你好。
我已经开始使用 jQuery,并且想知道如何从 String 动态调用匿名函数中的函数。 例如,我有以下功能:
function foo() {
// Being in the global namespace,
// this function can be called with window['foo']()
alert("foo");
}
jQuery(document).ready(function(){
function bar() {
// How can this function be called
// by using a String of the function's name 'bar'??
alert("bar");
}
// I want to call the function bar here from String with the name 'bar'
}
我一直试图找出'window'的对应物,它可以从全局命名空间调用函数,例如window[“foo”]。 在上面的小例子中,如何从字符串“bar”调用函数 bar?
感谢您的帮助。
更新:
这就是我想要的:
- 定义仅在闭包中使用的函数。
- 避免在包含这些函数的闭包中创建对象,以便作为 obj['bar'] 访问。
- 避免 eval(如果可能),以便以直接的方式更简单地编写代码(如果存在)。
- 通过 URI 参数或任何变量动态确定函数的名称。
作为 Javascript 的新手,我认为 'this' 将与闭包中的 'window' 对应,并尝试编写:
// in the closure
name = 'bar';
this[name]; // undefined ...
失败了(当然……)。
所有这些都是为了追求进一步的懒惰。 Javascript 对我来说是一种新事物,目前我一直在尝试尽可能懒惰地编写代码。
【问题讨论】:
-
Eval 在这里似乎是一个不错的选择。无论如何,您可能会创建嵌套闭包,不是吗?你能解释一下这个场景吗?为什么你有
bar作为字符串?你有没有考虑在你需要的地方定义这些函数? -
非常感谢您的评论和建议。为了清楚起见,我在上面的问题板中添加了我想要的内容(编辑下方)。我希望这次我的解释足以被理解。谢谢。
标签: javascript jquery lambda scope namespaces