做用域、做用域鏈是JavaScript中重要的組成部分和重點知識,是咱們務必要掌握的內容。javascript
若是沒有掌握,那麼做爲重點難點之一的函數的閉包將會難以理解、無從下手。java
規則:git
var scope = 'global';
function f() {
console.log(scope); // 'global'
}
f();
複製代碼
function f2() {
var scope2 = 'local2';
}
console.log(scope2); // 報錯scope2 is not defined
複製代碼
var scope3 = 'global3';
function f3() {
console.log(scope3); // undefined
var scope3 = 'local3';
console.log(scope3); // 'local3'
}
f3();
複製代碼
// 1 if代碼塊
var scope = 'g';
if(true) {
var scope = 'l';
console.log(scope); // 'l'
}
console.log(scope); // 'l'
// 2 for代碼塊
for(var i = 0; i < 10; i++) {
console.log(i); // 0 1 2 3 4 5 6 7 8 9
}
// 3 function函數
function fn() {
aa = 5;
}
fn();
console.log(aa); // 5
複製代碼
執行環境(execution context),也就是執行期上下文,它定義了執行期間能夠訪問的變量和函數。github
var g = 'g';
function fa() {
var a = 'a';
function fb() {
var b = 'b';
}
fb();
}
fa();
複製代碼
解析:數據結構
var name = 1;
var person = {name: 'Nancy'};
with (person) {
console.log(name); // 'Nancy'
}
var person2 = {
name2: 'Mike',
age: 18,
height: 175,
wife: {
name2: 'AA',
age: 21
}
}
with (person2.wife) {
console.log(name2); // 'AA'
console.log(age); // 21
}
複製代碼
function outer() {
var scope = 'outer';
function inner() {
return scope;
}
return inner;
}
var fn = outer();
console.log(fn()); // 'outer'
複製代碼