1、看下代碼,在函數中無論在哪裡聲明變數,都會自動提到函數頂部,這就是函數變數提升,它的作用於為當前函數中。 瀏覽器解析時 所以不用關心bool是否為true or false。實際上,無論如何test都會被創建聲明。 2、當使用let 和 const 時它們的作用域為{} let的作用域是在它所在 ...
1、看下代碼,在函數中無論在哪裡聲明變數,都會自動提到函數頂部,這就是函數變數提升,它的作用於為當前函數中。
function aa() { if(bool) { var test = 'hello man' } else { console.log(test) } }
瀏覽器解析時
function aa() { var test // 變數提升 if(bool) { test = 'hello man' } else { //此處訪問test 值為undefined console.log(test) } //此處訪問test 值為undefined }
所以不用關心bool是否為true or false。實際上,無論如何test都會被創建聲明。
2、當使用let 和 const 時它們的作用域為{}
function aa() { if(bool) { let test = 'hello man' } else { //test 在此處訪問不到 console.log(test) } }
let的作用域是在它所在當前代碼塊,但不會被提升到當前函數的最頂部,所以當為false時訪問不到test
再說一下
const name = 'lux' name = 'joe' //再次賦值此時會報錯