是否可以动态扩展javascript功能范围?我尝试没有成功如下:扩展javascript功能范围
function foo()
{
var bar = 12;
return function(x)
{
return eval(x);
}
}
var e = foo();
console.log(e("bar")); // 12
console.log(e("bar = 42;")); // 42
console.log(e("bar")); // 42
console.log(e("var baz = 99;")); // undefined
console.log(e("baz")); // ReferenceError: baz is not defined
然而,如果我从线baz = 99
删除var
那么巴兹变量变成一个全球性的(这使我感觉良好):
...
console.log(e("baz = 99;")); // 99
console.log(e("baz")); // 99
console.log(baz); // 99 (so baz is just a global)
为什么你会想这个,这是肮脏的地狱 – Raynos 2012-04-03 19:32:56
@Raynos:呵呵呵......可能是,但我不认为这是可怕的:我在写一个有趣的编译器瞄准的Javascript和实现模块我想知道如果使用函数作用域是一个可行的选项,同时保持模块“打开”(即允许从多个位置向模块添加名称,而不必一次性定义所有名称并使模块“密封“之后) – 6502 2012-04-03 19:37:19
您是否考虑过使用对象?您不能使用函数作用域作为模块的容器 – Raynos 2012-04-03 19:53:21