gpt4 book ai didi

javascript - 多重赋值 var a = b = b || {} 在 javascript 中

转载 作者:数据小太阳 更新时间:2023-10-29 04:27:12 27 4
gpt4 key购买 nike

阅读 leaflet.js 的代码,我遇到了一个我不完全理解的方法:

var events = this._leaflet_events = this._leaflet_events || {};

可以简化为

var a = b = b || {};

根据我的理解,这条指令是一个右结合的多重左手赋值,这意味着首先,JavaScript 将运行

b = b || {} //if b exists, returns b, else return an empty object

然后

a = b // returns the output of the preceding instruction

这对我来说没有意义。为什么不写成:

a = b || {};

完整上下文:

addEventListener: function( /*string*/ type, /*function */ fn, /*(optional) object*/ context){
var events = this._leaflet_events = this._leaflet_events || {};
events[type] = events[type] || {};
events[type].push({
action: fn,
context: context || this
});
return this;
}

我怀疑这是一个引用技巧,因为我没有看到 this._leaflet_events 是如何被该方法修改的。


想了想,写var a = b = b || {} 实际上是将 var a 分配给 b 的引用,无论是否定义了 b。修改 a 现在会修改 b

返回传单。与

    var events = this._leaflet_events = this._leaflet_events || {};

this._leaflet_events 存在或初始化为 {}events 通过引用分配给 this._leaflet_events。引用的值可能是 {},但在修改 events 时它仍然是 this._leaflet_events

反之,写作

    var events = this._leaflet_events || {};

将是一个错误,因为如果未定义 this._leaflet_eventsevents 现在将指向一个新创建的对象,其值为 {}/。修改 events 将更改新对象,但不会更改 this._leaflet_events 的值。

相同的外观值,不同的引用。事情是这样的。

最佳答案

语句var a = b = b || {};两件事:

  • 如果 b 未定义,它会将 b 初始化为 {}
  • 它将 a 设置为与 b 相同。

表达式 a = b || {}; 不修改 b 所以它不等价。

关于javascript - 多重赋值 var a = b = b || {} 在 javascript 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10790876/

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