Js 函式作用域和塊作用域

2021-10-21 20:03:24 字數 811 閱讀 2538

《你不知道的js》第二版上捲第三章筆記

全域性作用域:定義在函式外部的變數,函式內部可以呼叫

區域性作用域:定義在函式內部的變數,函式外部不可以呼叫

塊級作用域:(如同下面這個例子)

for

(var i=

1; i<

10; i++

)console.

log(i,b)

;//輸出的還是:10 100!!!

//說明js沒有塊級作用域

當我們需要在立即執行乙個函式,又不想暴露函式內部的變數,如何解決這個問題?

方法一:使用立即執行函式(iife)

var a =2;

(function

foo())

();console.

log(a)

;//undefined

//第二個引數的意義:作為變數傳入到函式中

(function

foo(global)

)(window)

;//立即函式定義的c在外面被遮蔽

// console.log(c);

方法二:es6定義的let

let定義的變數隱式地鎖在了任意的作用域中

//上面的例子中,暴露在全域性的for迴圈,當使用let去定義i,在外部就訪問不到i了

// console.log(k); 輸出為undefined

補充:es6中 const 定義常量 既然是常量了,就沒有更改的餘地

塊級作用域與函式作用域

函式作用域 變數在定義的環境中以及巢狀的子函式中處處可見 塊級作用域 變數在離開定義的塊級 後立即被 在es6之前,js的作用域只有兩種 函式作用域和全域性作用域。使用var宣告的變數,都存在變數提公升的過程。console.log a undefined console.log c undefin...

全域性作用域 函式作用域 塊級作用域的理解

作用域是任何一門程式語言中的重中之重,因為它控制著變數與引數的可見性與生命週期。很慚愧,我今天才深入理解js的作用域.我不配做乙個程式設計師.開玩笑,什麼時候理解都不晚,重要的是理解了以後能不能深深地扎在記憶裡,不能,那就寫下來在乙個 塊 括在一對花括號中的一組語句 中定義的所有變數在 塊的外部是不...

js塊級作用域

首先看乙個常見的函式,該函式輸出的是什麼呢?對的,就是5個6.為什麼會這樣呢?因為settimeout是個非同步函式,每次迴圈的時候都會建立乙個定時器,任務放到佇列裡,等主線程執行完才會執行定時器,這個時候迴圈跑完了,最後一次的 i 5 1 6,所以輸出5個6.for var i 1 i 5 i 1...