-
作用域簡介
-
JavaScript 作用域:就是代碼名字,在某個范圍內起的作用和效果。目的是為了提高程序的可靠性,減少命名沖突;
-
作用域是可訪問變量的集合。
-
在 JavaScript 中, 對象和函數同樣也是變量。
-
在 JavaScript 中, 作用域為可訪問變量,對象,函數的集合。
-
JavaScript 函數作用域: 作用域在函數內修改。
-
變量的作用域:根據作用域的不同我們的變量可以分為全局變量和局部變量
-
局部作用域
-
function fn() {
-
var str = '我是一個局部作用域';
-
}
-
console.log(str); // 這時是訪問不到的
-
-
// 局部變量:在局部作用域下的變量 或者在函數內部的變量就是局部變量
-
// 注意:函數的形參也可以看做是局部變量
-
-
function fun(aru) {
-
var num1 = 50; // num1就是局部變量 只能在函數內部使用
-
console.log(num1); // 在這里使用是正確的 但是在函數外面使用報錯
-
num2 = 70;
-
console.log(num2); // num2在這里可以正常輸出
-
-
-
console.log(aru);
-
// 首先在fun括號里面傳入一個hello 然后在函數內部輸出是正確的但是在函數外部輸出是錯誤的
-
-
}
-
//fun();
-
fun('hello');
-
//console.log(num1);// 報錯 num1是局部變量
-
console.log(num2); // 這里可以輸出num2是因為num2是特殊的全局變量
-
-
全局作用域:
全局變量:在全局作用域下的變量稱為全局變量,在全局下都可以使用
// 注意:如果在函數內部沒有聲明直接賦值的變量也屬于全局變量
-
var num = 10; //num就是一個全局變量
-
console.log(num);
-
-
-
function fn() {
-
console.log('全局變量在函數內部也可以使用' + num);
-
-
}
-
fn();
-
-
作用域鏈
-
作用域鏈:內部函數訪問外部函數的變量,采取的是鏈式查找的方式決定取哪個值 這種結構我們稱為作用域鏈 就近原則
-
-
var num = 10;
-
function fn() { //外部函數
-
var num = 20;
-
function fun() { //內部函數
-
console.log(num);
-
}
-
fun();
-
}
-
fn();
-
-
作用域鏈總結:
-
內部函數訪問外部函數的時候,采取的是鏈式查找的方式,一層一層往外查找
-
先是查找外一層,有沒有,沒有在往外接著查找,找到了我就輸出相應的結果
-
沒有的話繼續往上找就可以了,所以這個方法,我們稱為作用域鏈
-
簡單總結就是就近原則,誰離我近我就執行誰