js 的作用域 域解析 分析

2021-09-29 10:27:31 字數 1240 閱讀 5573

作用域鏈

函式每次執行時,瀏覽器都會在函式中開啟乙個地方用來儲存函式內的區域性資料。(宣告在函式內的區域性變數),這個地方就叫做作用域([scopes])

作用域鏈

變數與函式的查詢規則:當我們在函式使用一條資料時,優先在本作用域(呼叫資料的函式內),去查詢這條資料,如果在本作用域,,找不到這條資料,就去查詢父級的作用域,直到找到全域性作用域,如果在全域性作用域下也找不到,就報錯。

全域性作用域 --- 在任何地方都能訪問

函式外定義的變數擁有全域性作用域

不使用var定義的變數擁有全域性作用域

所有window物件上的屬性擁有全域性作用域

沒有宣告在任何函式內部的函式擁有全域性作用域

##域解析

js在解析**時,時一行一行從上向下執行的。何時得到undenfined,變數宣告

何時得到undenfined:

1 定義了一條資料,但是資料沒有賦值的時候,得到的結果時undenfined。

2 呼叫物件屬性,但是物件上並沒有這個屬性的時候。

何時得到null

1 null通常出現在找不到元素的時候,(通常出現在找不到物件的時候)。

域解析:當瀏覽器讀到乙個script標籤(或者函式時)時,就開始執行域解析:

快速瀏覽這個**塊:

1 如果碰到var 就將變數宣告提到**塊的最前邊。

2 如果碰到了function,就把整體提到**塊最前面緊跟var。

在賦值操作中儲存時函式的執行結果(函式返回值)

###定時器

1 setinterval(函式fn,間隔時間);間隔多長時間重複執行某件事情。

返回值:定時器編號;

2 settimeout(函式fn,延遲時間 )多長時間之後執行什麼事情,只執行一次。

返回值:定時器編號;

settimeout(fn,延遲時間); 多長時間之後,執行什麼事情(只做一次)

返回值:定時器編號

什麼時候使用定時器

當需要隔一段時間重複執行一段**時用 setinterval()

當需要延遲一段時間執行一段**時用 settimeout()

定時器清除 當定時器不在需要時要關閉

1 clearinterval(定時器編號)

2 cleartimeout(定時器編號)

當定時器不在需要的時候,一定記得關閉

定時器管理:

1 每次開啟定時器之前,先清除,在開啟。

2 如果當前的定時器還在開啟,我們就不開啟新的。

js 的作用域 域解析 分析

作用域鏈 函式每次執行時,瀏覽器都會在函式中開啟乙個地方用來儲存函式內的區域性資料。宣告在函式內的區域性變數 這個地方就叫做作用域 scopes 作用域鏈 變數與函式的查詢規則 當我們在函式使用一條資料時,優先在本作用域 呼叫資料的函式內 去查詢這條資料,如果在本作用域,找不到這條資料,就去查詢父級...

JS作用域解析

瀏覽器 js解析器 1 js 的預解析,找3樣東西,變數,函式,引數 var function 引數 a undefined 所有的變數,在正式執行 之前,都提前賦了乙個值 undefined未定義 fn1 function fn1 所有的函式,在正式執行 之前,都是整個函式塊 遇到重名的 只留乙個...

JS作用域及域解析規則

1 js作用域 變數和函式作用的範圍。2 js解析器可以分為域解析和逐行解讀 兩個過程。域解析 1 當進行域解析的時候,一旦找到var,就會提取後面的變數名,並給它賦值給undefined。2 一旦找到function和形參,把整個函式塊賦值給函式名,把形參賦值為undefined 逐行解讀 解讀表...