gpt4 book ai didi

javascript - Object DefineProperty 混淆了我对提升/同步和异步 js 的看法

转载 作者:行者123 更新时间:2023-12-01 00:58:41 25 4
gpt4 key购买 nike

当谈到浏览器如何加载数据并将其呈现给用户时,我认为我对异步/同步/提升有很好的理解。然而,下面的例子让我陷入了困境,让我发布这个例子,然后解释问题:

var obj = {
counter: 0,
};

Object.defineProperty(obj, 'reset', {
get: function() {
return this.counter = 2;
}
});

Object.defineProperty(obj, "increment", {
get: function() {
return this.counter++;
}
});

Object.defineProperty(obj, "decrement", {
get: function() {
return this.counter--;
}
});

console.log(obj.reset) //2
console.log(obj.increment + ' ' + "incremented") // "2 incremented"
console.log(obj.decrement + ' ' + "decremented") // "3 decremented"

认为浏览器解释这一点的方式是同步运行每一行代码,这应该产生:

//2
//2 incremented
//2 decremented

因为如果您在调用控制台日志之前一直跟踪“计数器”的更改,则计数器将从 0 更改为 2 到 3 又回到 2。

然后我我们等一下;如果返回的值不全是 2,那么调用这些控制台日志可能是一种获取数据的异步方式,这在逻辑上会让我认为结果应该是:

//2
//3
//2

因为如果您在运行控制台日志时访问“计数器”属性,那么从逻辑上讲,计数器值会在(obj.reset)时从 0 更改为2 然后3 on(obj.increment) 然后再次基于(obj.decrement)2

我对浏览器解释此问题的方式显然是错误的,并且希望清楚地逐步解释为什么返回的值是:

//2
//2 incremented
//3 decremented

如果可以的话,谢谢。

最佳答案

这与异步无关。 console.log 正在接收一个表达式并打印该值。 obj.increment 返回 2,因为 postfix ++ 就是这样的。运算符(operator)工作。它递增数字并返回递增之前的值。所以,最终结果是

console.log(2 + ' ' + "incremented") 

console.log() 方法最终获得字符串 2 递增。相同的逻辑适用于递减。表达式变为 console.log(3 + ' ' + "decremented")

关于javascript - Object DefineProperty 混淆了我对提升/同步和异步 js 的看法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56308562/

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