Skip to content
快看这页儿写了啥...

No.0110

题干

js
function foo() {
  let a = b = 0;
  a++;
  return a; 
}

foo();

console.log(typeof a);
console.log(typeof b);

题解

js
console.log(typeof a); // undefined
console.log(typeof b); // number

代码中有一个非常隐蔽的错误,就是函数中使用了 let a = b = 0; 这样的语句。这样的语句实际上会创建一个全局变量 b 和一个局部变量 a,并且只会影响 a 的值。

let a = b = 0; 等同于下面语句:

js
b = 0; // 隐式地将b变量挂载到全局对象上,相当于var b = 0;
let a = b; // 使用let声明一个局部变量a,并赋值为b的值

这样的结果是,foo 函数内部创建了一个局部变量 a,它的作用域只限于 foo 函数,而在 foo 函数外部创建了一个全局变量 b,它的作用域是整个程序。所以,当在 foo 函数内部执行 a++ 时,只会影响 a 的值,而不会影响 b 的值。而当在 foo 函数外部使用 typeof 运算符时,会得到以下结果:

js
console.log(typeof a); // 输出undefined,因为a是foo函数内部的局部变量,在外部无法访问
console.log(typeof b); // 输出number,因为b是全局变量,可以在任何地方访问

贡献者

isboyjc's avatar isboyjc

浏览量(PV)  次  ·  独立访客(UV)  人次
不正经的前端 | 八股 · 欢迎 star ⭐