好程式設計師web前端培訓分享JavaScript學習筆記函式進階

好程式設計師發表於2020-07-01

  好程式設計師web 前端培訓分享 JavaScript 學習筆記函式進階, 函式(下)

   作用域(重點)

   什麼是作用域,就是一個變數可以生效的範圍

   變數不是在所有地方都可以使用的,而這個變數的使用範圍就是作用域

全域性作用域

·  全域性作用域是最大的作用域

·  在全域性作用域中定義的變數可以在任何地方使用

·  頁面開啟的時候,瀏覽器會自動給我們生成一個全域性作用域 window

·  這個作用域會一直存在,直到頁面關閉就銷燬了

// 下面兩個變數都是存在在全域性作用域下面的,都是可以在任意地方使用的 var   num   =   100 var   num2   =   200

區域性作用域

·  區域性作用域就是在全域性作用域下面有開闢出來的一個相對小一些的作用域

·  在區域性作用域中定義的變數只能在這個區域性作用域內部使用

·  JS 中只有函式能生成一個區域性作用域,別的都不行

·  每一個函式,都是一個區域性作用域

// 這個 num 是一個全域性作用域下的變數 在任何地方都可以使用 var   num   =   100

function   fn()   {

   // 下面這個變數就是一個 fn 區域性作用域內部的變數    // 只能在 fn 函式內部使用    var   num2   =   200 }

fn()

變數使用規則(重點)

·  有了作用域以後,變數就有了使用範圍,也就有了使用規則

·  變數使用規則分為兩種, 訪問規則  和  賦值規則

訪問規則

·  當我想獲取一個變數的值的時候,我們管這個行為叫做  訪問

·  獲取變數的規則:

·  首先,在自己的作用域內部查詢,如果有,就直接拿來使用

·  如果沒有,就去上一級作用域查詢,如果有,就拿來使用

·  如果沒有,就繼續去上一級作用域查詢,依次類推

·  如果一直到全域性作用域都沒有這個變數,那麼就會直接報錯(該變數 is not defined)

var   num   =   100

function   fn()   {

   var   num2   =   200

  

   function   fun()   {

     var   num3   =   300

    

     console.log(num3)   // 自己作用域內有,拿過來用      console.log(num2)   // 自己作用域內沒有,就去上一級,就是 fn 的作用域裡面找,發現有,拿過來用      console.log(num)   // 自己這沒有,去上一級 fn 那裡也沒有,再上一級到全域性作用域,發現有,直接用      console.log(a)   // 自己沒有,一級一級找上去到全域性都沒有,就會報錯    }

  

   fun()}

fn()

·  變數的訪問規則 也叫做 作用域的查詢機制

·  作用域的查詢機制只能是向上找,不能向下找

function   fn()   {

   var   num   =   100 }fn()

console.log(num)   // 發現自己作用域沒有,自己就是全域性作用域,沒有再上一級了,直接報錯

賦值規則

·  當你想給一個變數賦值的時候,那麼就先要找到這個變數,在給他賦值

·  變數賦值規則:

·  先在自己作用域內部查詢,有就直接賦值

·  沒有就去上一級作用域內部查詢,有就直接賦值

·  在沒有再去上一級作用域查詢,有就直接賦值

·  如果一直找到全域性作用域都沒有,那麼就把這個變數定義為全域性變數,在給他賦值

function   fn()   {

   num   =   100 }fn()

// fn 呼叫以後,要給 num 賦值// 檢視自己的作用域內部沒有 num 變數// 就會向上一級查詢// 上一級就是全域性作用域,發現依舊沒有// 那麼就會把 num 定義為全域性的變數,併為其賦值// 所以 fn() 以後,全域性就有了一個變數叫做 num 並且值是 100 console.log(num)   // 100

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2701485/,如需轉載,請註明出處,否則將追究法律責任。

相關文章