只是想知道为什么每次我用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之间交替显示。我在疯了吗??
答案 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在这里没有考虑let
和var
之间存在很大差异:
在程序和函数的顶层,让我们不像var那样 在全局对象上创建一个属性。 MDN
不幸的是,全局对象上已存在属性status
(即window.status
)。因此,对于var
,您会遇到此处所述的问题:Boolean variable returns as string from javascript function