1. 程式人生 > >JS學習之函數的作用域

JS學習之函數的作用域

() 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             var
a=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學習之函數的作用域