-
作用域簡(jiǎn)介
-
JavaScript 作用域:就是代碼名字,在某個(gè)范圍內(nèi)起的作用和效果。目的是為了提高程序的可靠性,減少命名沖突;
-
作用域是可訪問變量的集合。
-
在 JavaScript 中, 對(duì)象和函數(shù)同樣也是變量。
-
在 JavaScript 中, 作用域?yàn)榭稍L問變量,對(duì)象,函數(shù)的集合。
-
JavaScript 函數(shù)作用域: 作用域在函數(shù)內(nèi)修改。
-
變量的作用域:根據(jù)作用域的不同我們的變量可以分為全局變量和局部變量
-
局部作用域
-
function fn() {
-
var str = '我是一個(gè)局部作用域';
-
}
-
console.log(str); // 這時(shí)是訪問不到的
-
-
// 局部變量:在局部作用域下的變量 或者在函數(shù)內(nèi)部的變量就是局部變量
-
// 注意:函數(shù)的形參也可以看做是局部變量
-
-
function fun(aru) {
-
var num1 = 50; // num1就是局部變量 只能在函數(shù)內(nèi)部使用
-
console.log(num1); // 在這里使用是正確的 但是在函數(shù)外面使用報(bào)錯(cuò)
-
num2 = 70;
-
console.log(num2); // num2在這里可以正常輸出
-
-
-
console.log(aru);
-
// 首先在fun括號(hào)里面?zhèn)魅胍粋€(gè)hello 然后在函數(shù)內(nèi)部輸出是正確的但是在函數(shù)外部輸出是錯(cuò)誤的
-
-
}
-
//fun();
-
fun('hello');
-
//console.log(num1);// 報(bào)錯(cuò) num1是局部變量
-
console.log(num2); // 這里可以輸出num2是因?yàn)閚um2是特殊的全局變量
-
-
全局作用域:
全局變量:在全局作用域下的變量稱為全局變量,在全局下都可以使用
// 注意:如果在函數(shù)內(nèi)部沒有聲明直接賦值的變量也屬于全局變量
-
var num = 10; //num就是一個(gè)全局變量
-
console.log(num);
-
-
-
function fn() {
-
console.log('全局變量在函數(shù)內(nèi)部也可以使用' + num);
-
-
}
-
fn();
-
-
作用域鏈
-
作用域鏈:內(nèi)部函數(shù)訪問外部函數(shù)的變量,采取的是鏈?zhǔn)讲檎业姆绞經(jīng)Q定取哪個(gè)值 這種結(jié)構(gòu)我們稱為作用域鏈 就近原則
-
-
var num = 10;
-
function fn() { //外部函數(shù)
-
var num = 20;
-
function fun() { //內(nèi)部函數(shù)
-
console.log(num);
-
}
-
fun();
-
}
-
fn();
-
-
作用域鏈總結(jié):
-
內(nèi)部函數(shù)訪問外部函數(shù)的時(shí)候,采取的是鏈?zhǔn)讲檎业姆绞剑粚右粚油獠檎?
-
先是查找外一層,有沒有,沒有在往外接著查找,找到了我就輸出相應(yīng)的結(jié)果
-
沒有的話繼續(xù)往上找就可以了,所以這個(gè)方法,我們稱為作用域鏈
-
簡(jiǎn)單總結(jié)就是就近原則,誰(shuí)離我近我就執(zhí)行誰(shuí)