gpt4 book ai didi

javascript - 为什么我不能在封闭函数之外重构这个匿名函数?

转载 作者:行者123 更新时间:2023-11-29 18:22:05 26 4
gpt4 key购买 nike

我有一段使用匿名函数的代码,我想测试一下。代码遵循以下结构(所有功能都在一张大 map 中)。但是,当我将匿名函数重构为更大的函数 hello3 之外的单独函数 f2 时,该值没有传递,正如我所期望的那样。为什么会这样?我可以将值作为参数传递,但是我也想了解基本原理。

var bigMap = {
f2: function() {
console.log("Closed over:" + name);
},

hello1: function(name) {
return function() {
console.log("Closed over:" + name);
};
},

hello2:function(name) {
var f1 = function() {
console.log("Closed over:" + name);
};
return f1;
},


hello3:function(name) {
return this.f2;
}
};

var f = bigMap.hello1("asad");
f(); // Outputs> Closed over:asad
f = bigMap.hello2("asad");
f(); // Outputs> Closed over:asad
f = bigMap.hello3 ("asad");
f(); // Outputs> Closed over:

最佳答案

JS 函数是词法闭包。这意味着它们仅关闭在物理上围绕函数定义的函数范围内定义的变量。

f2 引用变量 name,但它没有在该函数或任何周围函数中定义,所以它没有保存在闭包中。将其与 hello1 中的匿名函数和 hello2 中的命名函数 f1 进行比较——hello1 hello2各自定义了一个局部变量name,所包含的函数可以引用它。

关于javascript - 为什么我不能在封闭函数之外重构这个匿名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17499240/

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