gpt4 book ai didi

javascript - 扩展 javascript 函数作用域

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:35:57 26 4
gpt4 key购买 nike

是否可以动态扩展 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,那么 baz 变量将变为全局变量(这对我来说非常有意义):

...
console.log(e("baz = 99;")); // 99
console.log(e("baz")); // 99
console.log(baz); // 99 (so baz is just a global)

最佳答案

每次您调用 e("var baz = 4") 时,它都会在该函数调用的堆栈上创建一个变量,因此在您下次调用它时它不会可用。

如果您需要将变量动态添加到范围,我会使用 Rayno 的建议,使用 map 。 http://jsfiddle.net/UVSrD/

function foo()
{
var scope = {};
return function(x)
{
return eval(x);
}
}


var e = foo();

console.log(e("scope.bar = 12")); // 12
console.log(e("scope.bar")); // 12
console.log(e("scope.baz = 14")); // 14
console.log(e("scope.baz;")); // 14
// Not a global
console.log(typeof scope) // undefined

关于javascript - 扩展 javascript 函数作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10000069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com