我正在阅读Addy Osmani的Cranium.js(https://gist.github.com/addyosmani/3769967)代码,我无法理解JavaScript的两行代码。整个代码如下:了解Cranium.js代码
// Mix in to any object in order to provide it with custom events.
var Events = Cranium.Events = {
channels: {},
eventNumber: 0,
trigger: function (events, data) {
for (var topic in Cranium.Events.channels){
if (Cranium.Events.channels.hasOwnProperty(topic)) {
if (topic.split("-")[0] == events){
Cranium.Events.channels[topic](data) !== false || delete Cranium.Events.channels[topic];
}
}
}
},
on: function (events, callback) {
Cranium.Events.channels[events + --Cranium.Events.eventNumber] = callback;
},
off: function(topic) {
delete Cranium.Events.channels[topic];
}
};
我不明白,第一行是:
if (topic.split("-")[0] == events){
Cranium.Events.channels[topic](data) !== false || delete Cranium.Events.channels[topic];
}
那就是:我明白了,如果有什么我不明白是什么是内部发生大括号。在我看来(但我可能是错的),如果左边的表达是真的,什么也不会发生,如果不是,他会删除Cranium.Events.channels[topic]
。
第二行,我不明白的是:
Cranium.Events.channels[events + --Cranium.Events.eventNumber] = callback;
我不明白的双减号。
任何意见表示赞赏。
所以你的问题是更通用的“** **和** - **是什么意思?” - 首先是正常的'OR' taht在这种情况下转换为正常的'if'子句,因为左边的操作是布尔型的,第二个与'Cranium.Events.eventNumber = Cranium.Events.eventNumber - 1'相同。 ,但是因为它在后面,'--Cranium.Events.eventNumber'而不是'Cranium.Events.eventNumber - '它将首先计数并在操作后给你数字。 – balexandre
也许,我不明白的是大局:也就是说,我不明白他为什么要进行这种减法。谢谢:-) – ContentiousMaximus