为什么这两个JS函数不同?

时间:2013-03-12 12:48:12

标签: javascript

lsEstimator是包含2个元素的数组时,此函数返回true

function got_estimators() {
  var retval = 
   (typeof lsEstimator != 'undefined' &&
    lsEstimator != null &&
   lsEstimator.length > 0);
  return retval;
}

但是此功能没有(我认为,它会在Chrome和FF中返回undefined):

function got_estimators() {
   return 
      (typeof lsEstimator != 'undefined' &&
      lsEstimator != null &&
      lsEstimator.length > 0);
}

为什么?

1 个答案:

答案 0 :(得分:17)

由于第二个示例中return之后的换行符。代码评估为:

function got_estimators() {
   return; // <-- bare return statement always results in `undefined`.
   (typeof lsEstimator != 'undefined' &&
    lsEstimator != null &&
    lsEstimator.length > 0);
}

JavaScript甚至没有评估逻辑运算符。

为什么会这样?因为JavaScript具有自动分号插入,即它尝试在“有意义的地方”插入分号(more information here)。

return关键字和返回值放在同一行:

return (typeof lsEstimator != 'undefined' &&
  lsEstimator != null &&
  lsEstimator.length > 0);