title: 关于 JavaScript 作用域问题description: 作用域不同语言的答案不一样
redirect: 2019-01-02-javascript-use

description: 作用域不同语言的答案不一样

简介

  1. //block
  2. console.log("foo() --------------------------------------------------")
  3. var a = 1;
  4. function foo() {
  5. var a = 2;
  6. console.log(a);
  7. }
  8. foo(); // 2
  9. console.log(a); // 1
  10. console.log("bar() --------------------------------------------------")
  11. // function block
  12. var b;
  13. function bar() {
  14. var b = 1;
  15. if (true) {
  16. var b = 2; // same variable!
  17. console.log(b); // 2
  18. }
  19. console.log(b); // 2
  20. }
  21. bar();
  22. console.log("foobar() --------------------------------------------------")
  23. var c;
  24. function foobar() {
  25. var c = 1;
  26. if (true) {
  27. let c = 2; //
  28. console.log(c); // 2
  29. }
  30. console.log(c); // 1
  31. }
  32. foobar();

问题

  • 语句作用域与函数作用域的区别?

思考

  • 同是 var 定义
  • foo(){} 外的 a 不等价于 foo(){} 里的 a(function 外的代码块)
  • boo()->if{} 里的 a 等价于 boo()->if{} 外的 a
  • 一个是 var 定义,另一个是 let 定义
  • foo(){} 外的 a 不等价于 foo(){} 里的 a(function 外的代码块)
  • boo()->if{} 里的 a 不等价于 boo()->if{} 外的 a