什么是Javascript逗号分隔函数

bar*_*oma 3 javascript dojo

我正在阅读一个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))
Run Code Online (Sandbox Code Playgroud)

这个函数写在一行上.它包含用逗号分隔的函数.所以我看不懂.

我不问上面的功能是做什么的.

这是什么意思?:

this._hasUI && (firstFunction, secondFunction, ...)
Run Code Online (Sandbox Code Playgroud)

它有什么作用?或者我怎么写清楚?

Cer*_*rus 8

这是一种只有在this._hasUI解析为true 时才执行函数的方法.

试试这个:

true && (console.log(1), console.log(2));
Run Code Online (Sandbox Code Playgroud)

还有这个:

false && (console.log(1), console.log(2));
Run Code Online (Sandbox Code Playgroud)

你会看到只有第一行才能运行这些console.log()功能.

这是因为布尔AND运算符(&&)被懒惰地计算.如果操作符的左侧解析为false,则解释器将不会打扰评估右侧,因为操作永远不会导致操作true.这意味着只有当左侧是真值时,才会执行右侧的功能.

  • 为了使答案更加完整,语法`(function1,function2)`将执行两个函数(从左到右)并返回`function2`返回的任何内容,而不管`function1`返回什么. (4认同)
  • @user2070775 我认为你的评论更符合我想象的 OP 的要求 (2认同)