只是想知道为什么每次我使用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
。不幸的是,let
和var
之间有很大的区别,Babel在这里没有考虑:在程序和函数的顶层,让我们与var不同,它不
在全局对象上创建一个属性。
MDN
不幸的是,全局对象(即
status
)上已经有一个属性window.status
。因此,使用var
时,您会遇到以下问题:Boolean variable returns as string from javascript function