布尔值交换babel无法正常工作

时间:2018-01-21 23:51:44

标签: javascript boolean babel

只是想知道为什么每次我用babel调用Codepen中的函数时这个布尔值都没有改变。

let status = true;

let statusChange = () => {
  status = !status;
  return `new status: ${status}`;
}

console.log(statusChange());
console.log(statusChange());
console.log(statusChange());
console.log(statusChange());
console.log(statusChange());

您应该看到控制台日志在true和false之间交替显示。我在疯了吗??

1 个答案:

答案 0 :(得分:1)

Babel将您的代码转换为:

var status = true;

var statusChange = function statusChange() {
  status = !status;
  return "new status: " + status;
};

console.log(statusChange());
console.log(statusChange());
console.log(statusChange());
console.log(statusChange());
console.log(statusChange());

如您所见,let status = true已更改为var status = true。不幸的是,Babel在这里没有考虑letvar之间存在很大差异:

  

在程序和函数的顶层,让我们不像var那样   在全局对象上创建一个属性。   MDN

不幸的是,全局对象上已存在属性status(即window.status)。因此,对于var,您会遇到此处所述的问题:Boolean variable returns as string from javascript function