0x01-关于 JavaScript 作用域问题
description: 作用域不同语言的答案不一样
简介¶
//block
console.log("foo() --------------------------------------------------")
var a = 1;
function foo() {
var a = 2;
console.log(a);
}
foo(); // 2
console.log(a); // 1
console.log("bar() --------------------------------------------------")
// function block
var b;
function bar() {
var b = 1;
if (true) {
var b = 2; // same variable!
console.log(b); // 2
}
console.log(b); // 2
}
bar();
console.log("foobar() --------------------------------------------------")
var c;
function foobar() {
var c = 1;
if (true) {
let c = 2; //
console.log(c); // 2
}
console.log(c); // 1
}
foobar();
¶
//block
console.log("foo() --------------------------------------------------")
var a = 1;
function foo() {
var a = 2;
console.log(a);
}
foo(); // 2
console.log(a); // 1
console.log("bar() --------------------------------------------------")
// function block
var b;
function bar() {
var b = 1;
if (true) {
var b = 2; // same variable!
console.log(b); // 2
}
console.log(b); // 2
}
bar();
console.log("foobar() --------------------------------------------------")
var c;
function foobar() {
var c = 1;
if (true) {
let c = 2; //
console.log(c); // 2
}
console.log(c); // 1
}
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
最后更新: 2021-07-26
创建日期: 2021-03-04
创建日期: 2021-03-04