只是想知道为什么每次我使用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之间交替显示。我在这里疯了吗?

最佳答案

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。不幸的是,letvar之间有很大的区别,Babel在这里没有考虑:


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


不幸的是,全局对象(即status)上已经有一个属性window.status。因此,使用var时,您会遇到以下问题:Boolean variable returns as string from javascript function

09-30 16:08