gpt4 book ai didi

javascript - 什么时候嵌套函数通常适用于 JavaScript?

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

我正在通过 this website 学习 JavaScript .该链接指向我正在阅读的特定章节。

在书中,作者谈到了将模块的实现细节保留在本地范围内。他通过以下方式实现:

var dayName = function() {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
return function(number) {
return names[number];
};
}();

我明白这是怎么回事,但我不明白他为什么要这样做。他为什么不干...

function dayName(number) {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
return names[number];
}

...在我看来,哪个代码更清晰易读?鉴于他将 names 保留在本地范围内的目标,创建嵌套的 lambda 似乎是多余的。

在这种情况下使用嵌套函数有什么真正的优势吗?还是他仅将其用于教育目的?

谢谢!

最佳答案

您展示的玩具示例不是很引人注目。这样写的主要优点是数组只创建一次,而不是每次调用函数时。这使得它更快一些,但代价是保持为整个 session 分配的数组(一种常见的时空权衡)。实际上,很少有人用这种方式编程。

当您拥有多个函数并且它们对共享数据进行操作时,该技术会变得更加有用。如果其中一个函数修改了变量,这会在闭包中被记住,并且在稍后调用时对其他函数可见。

var dayName = function() {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
return {
getDay: function(number) {
return names[number];
},
setDay: function(number, newName) {
names[number] = newName;
}
};
}();

现在你可以写:

console.log(dayName.getDay(3)); // prints "Wednesday"
dayObj.setDay(3, "Mercredi");
console.log(dayName.getDay(3)); // prints "Mercredi"

您不能使用第二种形式的函数执行此操作,因为它没有从一次调用到下一次调用的内存。

关于javascript - 什么时候嵌套函数通常适用于 JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43131571/

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