Javasript 闭包行为

问题描述 投票:0回答:1

嗨,我正在学习 Javascript 闭包和 tjis 代码,这对我来说很有趣:

function Unique_id2() {
    let counter = 0;
    function f() { return counter++; };
    return f();
}

console.log("UID2");
let f = Unique_id2;
console.log(typeof f);
console.log(Unique_id2());
console.log(Unique_id2());
console.log(Unique_id2());
console.log(Unique_id2());
console.log(Unique_id2());

结果是:

UID2
functions.js:65 function
functions.js:66 0
functions.js:67 0
functions.js:68 0
functions.js:69 0
functions.js:70 0

这对我来说很奇怪,因为计数器每次都会递增......

你能解释一下出了什么问题吗

javascript closures
1个回答
0
投票

您不会返回闭包,您只是在每次调用时调用它

Unique_id2()
。每次执行此操作时,它都会将计数器重置为 0 并返回该值。

要获得递增计数器,您必须返回闭包,而不是调用它的结果。

function Unique_id2() {
    let counter = 0;
    function f() { return counter++; };
    return f;
}

console.log("UID");
let f = Unique_id2();
console.log(typeof f);

console.log(f());
console.log(f());
console.log(f());
console.log(f());
console.log(f());

console.log("UID2");
let f2 = Unique_id2();
console.log(typeof f2);
console.log(f2());
console.log(f2());

© www.soinside.com 2019 - 2024. All rights reserved.