延遲函式及作用域的理解
阿新 • • 發佈:2022-03-03
延遲函式(以下兩者的this都指向window)
setTimeout(function () { console.log(123) }, 3000); //只執行一次 setInterval(function () { console.log(123) }, 3000); //連續不斷的執行 var id = setTimeout(function () { console.log(456) }, 1000); clearTimeout(id) //清除當前的定時器clearInterval()
作用域
JavaScript的作用域也稱為函式作用域,因為js中作用域的劃分是以函式來進行的
區域性作用域:
在函式內部能夠訪問變數的所在區域
在函式內部使用var定義的任意變數都是區域性變數
區域性作用域對應的作用域我們稱之為函式作用域
外部是不能直接訪問函式內部的變數
全域性作用域:
在程式碼的任何地方都可以訪問的變數,稱為全域性變數
全域性變數是直接繫結在window作用域上面的
直接暴露在script標籤中的變數是一個全域性的(就是沒有看到function的)
注意:作用域以函式來進行劃分
在尋找變數的時候,先從自己開始找,逐級向外尋找,找到離它最近的變數,直到window
當我們在函式內部定義變數的時候省略var關鍵字,則這個變數成了全域性變數(不推薦使用)
在寫程式碼的過程中,我們應該儘量少的去使用全域性變數
原因:1、使用全域性變數容易汙染全域性空間
2、全域性變數很難被垃圾回收機制回收(垃圾回收機制)
宣告提升:
變數宣告的提升
變數會被提升到它對應作用域的頂端
函式宣告提升:
執行語句在宣告函式之前,這個函式也是可以被正常來呼叫的(這是JS中的函式宣告提升,並不是編譯)
使用宣告式函式才可以被提升,使用字面量方式不能被提升