首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >闭包-编译器没有使用&&将这条if语句扁平化为"guard“。

闭包-编译器没有使用&&将这条if语句扁平化为"guard“。
EN

Stack Overflow用户
提问于 2018-05-07 08:43:49
回答 1查看 33关注 0票数 0

我不明白为什么CC不这么做。例如,我经常使用像var x = obj.fun && obj.fun();这样的“卫士”语句编写代码。但CC并不会将if简化为“守卫”。

编译后的js和预期的js真的不同吗?

未编译的源代码:

代码语言:javascript
复制
window.test = function () {
  var ret = false;
  if (Math.random) {
    ret = Math.random() < 0.5;
  }
  return ret;
}

命令

代码语言:javascript
复制
npx google-closure-compiler \
--compilation_level ADVANCED \
--js test.js \
--js_output_file out.js

编译输出(美化):

代码语言:javascript
复制
window.test = function() {
  var a = !1;
  Math.random && (a = 0.5 > Math.random());
  return a;
};

预期输出(“我会做什么”):

代码语言:javascript
复制
window.test = function () {
  return Math.random && 0.5 > Math.random();
}
EN

回答 1

Stack Overflow用户

发布于 2018-05-07 08:51:57

如果Math.random函数不存在,则此代码返回undefined

代码语言:javascript
复制
return Math.random && 0.5 > Math.random();

我认为返回false和返回undefined可能是有区别的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50205803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档