作用域鏈
函式每次執行時,瀏覽器都會在函式中開啟乙個地方用來儲存函式內的區域性資料。(宣告在函式內的區域性變數),這個地方就叫做作用域([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 逐行解讀 解讀表...