我正在阅读一个javscript dojo库,我看到许多复杂的函数,我无法理解。例如:
_refreshUI: function () {
this._hasUI && (g.empty(this.flowContainer), f.forEach(this.basemaps, function (a, b) { a.id || (a.id = "basemap_" + b); this.flowContainer.appendChild(this._buildNodeLayout(a))
}, this), g.create("br", { style: { clear: "both" } }, this.flowContainer), this._markSelected(this._selectedBasemap))
此功能写在一行上。它包含用逗号分隔的函数。所以我看不懂。
我不问上述功能是做什么的。
这是什么意思?:
this._hasUI && (firstFunction, secondFunction, ...)
它做什么?或者我怎么写清楚?
答案 0 :(得分:7)
这是仅在this._hasUI
解析为true时执行函数的方法。
试试这个:
true && (console.log(1), console.log(2));
而且:
false && (console.log(1), console.log(2));
您会看到只有第一行会运行console.log()
个功能。
这是因为布尔AND运算符(&&
)被懒惰地评估。如果运算符的左侧解析为false
,则解释器将不会打扰评估右侧,因为该操作永远不会导致true
。这意味着只有当左侧是truthy value时才会执行右侧的功能。