1. 程式人生 > 其它 >延遲函式及作用域的理解

延遲函式及作用域的理解

延遲函式(以下兩者的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中的函式宣告提升,並不是編譯)

使用宣告式函式才可以被提升,使用字面量方式不能被提升