JS學習之函數的作用域
阿新 • • 發佈:2018-10-29
() div ole 才會 報錯 變量賦值 fine 存在 內部使用
作用域
變量或者函數可訪問的一個範圍,以函數來劃分,一個函數塊就是一個作用域。
一 全局作用域
全局:整個文檔
變量或者函數在函數外面聲明,那它們就是全局變量或者全局函數,在這個頁面的任何地方都可以訪問的到。
聲明全局作用域的方法:
1、把變量或者函數放在函數外面聲明
2、變量不用var聲明,直接給變量賦值;不管在函數外還是函數內聲明
全局變量在任何地方都可以訪問的到是因為全局變量是window的一個屬性,window是一個全局對象,本身在頁面中的任何位置都可以訪問
1 var a=10;
2 console.log(a); //10 a 在函數外面聲明是一個全局變量
3
4 function test(){
5 var b=12; //在函數內聲明,是局部變量
6 c=20; // 沒有用var 聲明就是全局變量
7 console.log(a);
8 }
9 test(); // 10 因為a 是在函數外面聲明的,是全局變量,所以函數內部也可以訪問
10 console.log(c); //可以訪問的到,
11 console.log(b); // 報錯 b is not defined 因為b是局部變量,只能在函數內部使用,在函數外面無法訪問的到
註意:1:盡量避免使用全局變量,可能會變量覆蓋
一直存在內存中,當頁面一打開就一直存在著內存中,當頁面關閉的時候才會消失
2:聲明變量的時候一定加上var 因為不建議使用全局變量
二 局部作用域
局部:函數範圍內
變量或者函數在函數內部聲明的,作用僅存在於聲明的函數中,在函數外面無法訪問
函數裏面可以聲明函數,就是函數嵌套(局部函數),可以訪問父函數裏的內容
1 function test(){ 2 vara=10; //局部變量 3 var b=20; 4 //在函數內部聲明,是局部函數 5 function test1(){ 6 console.log(a+b); 7 } 8 test1(); // 只能在函數內部調用 9 } 10 test(); // 在函數外面聲明,是一個全局函數 11 console.log(a); // 報錯 a 是一個局部變量,只能在test函數內部使用,在test函數外無法訪問 12 // 同樣的道理也無法訪問到b ,test1()
註意:局部變量和局部函數只能在聲明他們的地方用,在其他地方無法訪問,會直接報錯
三 作用域鏈
變量與函數的查找規則
查找規則:如果一個函數需要用到一個變量,先會在自己的作用域裏去找這個變量,如果自己有就直接使用自己的,如果自己沒有就會一層一層往外找直到找到外面的變量,找到後就用外面的變量
1 var a=10;
2 function test(){
3 console.log(a);
4
5 }
6 test(); // 10 函數先會在自己的作用域裏去找a,發現沒有找到就會找他父級,在父級中找到了一個a,就用這個a
7 function test1(){
8 var a=12;
9 console.log(a);
10 }
11 test1(); // 12 在自己的作用域中找到了a,就會用這個a,停止查找(就近原則)
註意:作用域鏈會一層一層往外找,不會往裏面找
JS學習之函數的作用域