JavaScript中等效于Python的locals()吗?
在Python中,我们可以使用内置的函数locals()
和globals()
来获取当前作用域内所有的本地和全局变量,形成一个字典。那么在JavaScript中有没有类似的方法呢?比如,我想做一些像下面这样的事情:
var foo = function(){ alert('foo'); };
var bar = function(){ alert('bar'); };
var s = 'foo';
locals()[s](); // alerts 'foo'
这样做有可能吗?还是说我应该直接使用一个本地对象来查找呢?
6 个回答
3
我记得Brendan Eich在最近的一期播客中提到过这个问题;如果我没记错的话,这个想法并没有被考虑,因为它会给优化带来不合理的限制。他把这个问题和arguments
这个局部变量进行了比较,虽然arguments
在处理可变参数时很有用,但它的存在让我们无法仅通过查看函数的定义来猜测这个函数会用到哪些东西。
顺便说一下,我相信JS曾经确实支持通过arguments
这个局部变量来访问局部变量——快速搜索一下显示这个功能已经被弃用了。
5
嗯,我觉得在JavaScript里没有类似的东西。你可以用eval来代替locals(),像这样:
eval(s+"()");
你只需要知道其实函数foo是存在的。
补充:
不要使用eval :) 用这个:
var functionName="myFunctionName";
window[functionName]();
18
locals() - 不行。
globals() - 可以。
window
是指向全局范围的一个引用,就像 Python 中的 globals()
一样。
globals()["foo"]
这和下面的内容是一样的:
window["foo"]