JavaScript 中的闭包:再举一个例子

Closures in JavaScript: one more example

本文关键字:一个 闭包 JavaScript      更新时间:2023-09-26
function say667() {
    console.log(1);
    // Local variable that ends up within closure
    var num = 666;
    var sayAlert = function() {
            console.log(num);
        }
    num++;
    return sayAlert;
}
say667();

为什么这不起作用?它控制台日志1但不控制台.log num .

你返回的是实际的函数,你没有调用函数,你需要在"sayAlert"之后添加((

function say667() {
    console.log(1);
    // Local variable that ends up within closure
    var num = 666;
    var sayAlert = function() {
            console.log(num);
        }
    num++;
    return sayAlert();
}
say667();

小提琴

而不是return sayAlert;你必须调用return sayAlert();

(function() {
   console.log(1);
   // Local variable that ends up within closure
   var num = 666;
   var sayAlert = function() { console.log(num); }
   num++;
   return sayAlert();
})();

在这里,此函数将自动调用。

或者和你的,

function say667() {
    console.log(1);
    // Local variable that ends up within closure
    var num = 666;
    var sayAlert = function() {
            console.log(num);
    }
    num++;
    return sayAlert();
}
say667();

为什么这不起作用?

由于say667()确实返回sayAlert函数(闭包(,因此不会调用它。尝试

var say = say667(); // logs 1 and returns the function
say(); // logs 667
say(); // logs 667 again

你可以称呼say667()();但从垃圾收集者的角度来看,这不是很好。最好从say667函数中return sayAlert()