gpt4 book ai didi

javascript - Javascript 中静态值的闭包

转载 作者:行者123 更新时间:2023-11-28 20:19:44 25 4
gpt4 key购买 nike

我有一个问题。我们都知道 Javascript 中闭包的力量,我想利用这种力量。假设我有一个名为“BRB”的对象。我想要的是,每当用户第一次调用方法 getBrowser() 时,它都会找出浏览器版本/名称并返回它,并将其作为静态存储在其内部,当第二次调用 getBrowser() 时,它应该返回相同的值无需计算的值,因为它已经静态存储在某处。这可以通过多种不同的方式完成,我们可以在对象中存储一个属性,在第一次调用时我们可以为其设置一些值并在以后使用它,我们可以在创建对象时直接运行 getBrowser 方法,语法为

(function()(
...
))()

然而,这不是我想要的。我想要的只是 getBrowser() 方法只计算一次值并一直使用它,我不想将值存储在对象内的其他地方,并且我不想在创建对象时立即运行此方法,我'我只允许使用此方法,并且所有操作都必须在该方法中进行。我在这里举了一个例子,正如你所看到的,它总是打印出“0”,但我想要的是它为每个 console.log 请求打印 0,1,2,3。我希望我说清楚了。谢谢。

(
function(window){

if(window.BRB) return;

var BRB = function(){}
BRB.prototype.getBrowser = function(){
var browser = null;
return function(){
if(browser === null){
browser = 0;
}
return browser++;
}
}

window.BRB = new BRB();
})(window);

console.log(BRB.getBrowser()());
console.log(BRB.getBrowser()());
console.log(BRB.getBrowser()());
console.log(BRB.getBrowser()());

最佳答案

你的要求有点奇怪。这是您要找的吗?它的工作原理是在 getBrowser 函数本身上创建一个属性:

(function(window){

if(window.BRB) return;

var BRB = function(){}
BRB.prototype.getBrowser = function(){
if(typeof this.getBrowser.browser == "undefined"){
return this.getBrowser.browser = 0;
} else {
return ++this.getBrowser.browser;
}
}

window.BRB = new BRB();
})(window);

console.log(BRB.getBrowser());
console.log(BRB.getBrowser());
console.log(BRB.getBrowser());
console.log(BRB.getBrowser());

http://jsfiddle.net/5DheZ/

关于javascript - Javascript 中静态值的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18580636/

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