gpt4 book ai didi

javascript - JS λ 函数和 "upper context"变量

转载 作者:行者123 更新时间:2023-11-29 16:28:16 25 4
gpt4 key购买 nike

假设我有一些设置变量并调用直接使用它们的 λ 函数的上下文:

function outerContext(){
...
var data = ...; // some data the script uses
...
someObject.method = function(){
data; // the variable is used here
};
...
}

我知道动态创建的函数具有创建它的上下文的快照,因此可以在其中访问 data 变量。

当我使用这种动态创建的方法时,我可能会面临哪些危险?我应该始终将此数据作为参数提供还是可以?

最佳答案

内部函数无权访问“快照”,它具有对data变量的完全访问权限。

function outer() {
var data = 1;

...

someObject.method = function () {
data = 42;
};

someObject.method();
// data == 42
}

(真正的解释是,当在内部函数中使用 data 时,Javascript 会尝试找出 data 所在的作用域。它将沿着作用域链向上遍历找到创建变量的位置,这就是将要使用的变量。)

没有“危险”,这是Javascript的核心能力之一。它就像修改对象属性的对象方法。当然,您需要注意您想要做什么,您真的想修改变量还是只想在本地使用它?

对于“快照”,您需要使用闭包:

function outer() {
var data = 1;

...

someObject.method = (function (data) {
return function () {
data = 42;
}
})(data);

someObject.method();
// data == 1
}

关于javascript - JS λ 函数和 "upper context"变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3380301/

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