gpt4 book ai didi

javascript - 在一个函数中,返回另一个函数的目的是什么? (JavaScript)

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

我在一个函数中返回另一个函数的练习中查看了这段代码:

var dayName = function() {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
return function(number) {
return names[number];
};
}();
console.log(dayName(3));
// → Wednesday

然而,即使我不返回另一个函数,这个替代代码也可以工作:

var dayName = function(number) {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
return names[number];
};
console.log(dayName(3));
// → Wednesday

谁能解释一下第一种方法的意义是什么?使用第一种方法和第二种方法之间是否有任何区别?

谢谢!

最佳答案

第一个选项在代码首次初始化时执行外部函数(凭借定义末尾的 ())并将内部函数分配给变量 dayName。这在 dayName 符号中获得了相同的功能逻辑,但第一个选项允许数组 names 存在于闭包中。这种关闭提供了以下好处:

  1. 数组仅在启动时计算一次,而不是每次调用函数时(这发生在您的第二个选项中)。
  2. 数组名称位于私有(private)命名空间中,不会向全局命名空间添加任何内容(如果您将数组移到函数外部以便仅计算一次,就会发生这种情况)。
  3. 数组只能由函数访问或修改,不能从函数外部访问,因此更加防篡改。
  4. 数组可以以持久的方式(从函数内)修改,从一个函数调用持续到下一个函数调用。在这种情况下没有这样做,但可以成为这种设计模式的优势。您还可以将其他变量添加到闭包中,这些变量将类似地从一个函数调用持续到下一个函数调用。这在您的第二个选项中是不可能的,除非您在函数外部创建全局变量。

因此返回函数可以让您两全其美。第一个选项的唯一缺点是函数名没有像静态函数声明那样被提升到 JS 文件的顶部,因此在这段代码执行之前它是不可用的。这通常不是一个重要的问题,但它确实需要您更加小心地处理代码定义的顺序与启动代码中的用法。

关于javascript - 在一个函数中,返回另一个函数的目的是什么? (JavaScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25418465/

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