gpt4 book ai didi

JavaScript 动态闭包作用域

转载 作者:行者123 更新时间:2023-12-03 16:27:36 24 4
gpt4 key购买 nike

我遇到了关闭问题,想确认一个怀疑。我试图让一个函数访问它最初定义的范围之外的范围。例如,以下代码块按我的预期工作。

(function(){

function Outer () {
var test = "closure access";
return function Inner () {
alert(test);
};
};

// call outer then inner
Outer()();

}());

当运行字符串“closure access”时被警告。

但是,如果内部函数是在“外部”范围之外定义的,然后从“外部”函数返回,它就不再具有访问本地“测试”变量的权限。例如:

(function(){

function Inner () {
alert(test);
};

function Outer () {
var test = "closure access";
return Inner;
};

// call outer then inner
Outer()();

}());

这种行为对我来说很有意义,因为“外部”函数实际上是在正常范围之外寻找在其上方定义的“内部”函数,而内部函数并未在“外部”的范围内定义本地变量“测试”。我的问题是,有没有办法在某处(其他地方)定义一个函数,但从另一个函数动态返回它,同时仍然保留其闭包函数的变量?

如果我必须解释得更好,请告诉我。

====编辑====

好的,所以定义函数会创建范围而不是使用函数。下面的代码片段没有定义函数吗?

(function(){

function Outer () {
var test = "closure access";
return new Function("alert(test);");
};

// call outer then inner
Outer()();

}());

如果新函数在内存中的那个点定义一个函数,它是否应该不能访问测试变量?

最佳答案

My question is, is there a way to define a function somewhere (elsewhere) but dynamically return it from another function while still preserving the variables of its closure function?

没有。您需要在那里定义一个函数来访问该范围内的变量。

然而,您可以动态地使用该函数中的其他函数,以便您可以以某种方式模拟这种行为;尽管如此,您始终需要创建一个新函数。

Does the following code snippet not define a function?

return new Function("alert(test);");

没有。 Function constructor创建一个没有作用域链的函数,即就好像它是在全局作用域中声明的一样。您需要使用 eval

关于JavaScript 动态闭包作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24640776/

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