1. 程式人生 > >淺談作用域、變數提升、閉包與遞迴

淺談作用域、變數提升、閉包與遞迴

前提:

1.函式想要執行,就必須知道自身變數以及自身變數所在作用域中的位置。

2.函式的執行取決於函式定義時所在的作用域,不取決於呼叫時的作用域。

3.函式在作用域鏈中的變數訪問遵循向上查詢。

(一)所謂作用域:變數的作用範圍。

1.在全域性宣告的變數具有全域性作用域。

2.在函式內宣告的變數具有區域性作用於。

(二)變數提升:在程式編譯階段,作用域內的變數會被提升到當前作用域的頂部,且宣告變數不賦值。

(三)閉包:函式儲存自身變數所在作用域鏈的位置的現象。

(四)遞迴:函式呼叫自身的程式設計技巧

死遞迴:

function foo(){
    foo();
}

foo();

前提:

a.遞迴規律

b.遞迴出口條件

c.遞迴的規律趨近於出口條件

 

var a = 5;
function fn(){
    alert(a);  //變數提升(也就是a=10提升到了fn最上面)且宣告變數不賦值,為undefined
    var  a = 10;  
    alert(a);  //10
}

fn();
alert(a);  //變數作用域  5

輸出結果:undefined   10   5