瀏覽器:「js解析器」
1)js 的預解析,「找3樣東西,變數,函式,引數」 :var function 引數
a = undefined
所有的變數,在正式執行**之前,都提前賦了乙個值:undefined未定義
fn1 = function fn1()
所有的函式,在正式執行**之前,都是整個函式塊
遇到重名的:只留乙個
變數和函式重名了,就只留下函式
2)逐行解讀**:
表示式:= + - * / % ++ -- ! 引數……
什麼是表示式? 答:可以修改預解析的值!
總結:域由兩部分組成,script域和function域,先預解析後逐步執行**.預解析:找var和function!
兩大特徵: 自上而下,自內而外; 表示式能夠改變倉庫中的值;
0.
//**********************//瀏覽器沒反應,f12顯示 "a is not defined"
0.1
0.2 執行到第一行**的時候先執行的js預解析,發現有var a變數的和函式 a,因為重名只能留乙個,函式優先級別高於變數和引數,所以是留下的是函式a,再往下解析凡是遇到變數直接ko掉直到遇到最後乙個函式,後面的函式會覆蓋前面的函式!所以第一行 列印的是function a(); 預解析好之後是逐步執行**,有加減乘除等就能改變預解析的值,所以a在不斷的被改變!本題中的函式都沒有被呼叫,可以被忽視,如果呼叫了那麼函式有自己的作用域,也要重新做預解析和逐步執行**
1.
var a = 1;function fn1()
2.
var a = 1;function fn1()
3.
var a = 1;function fn1()
fn1();//undefined
alert(a);//1
4. 當在fn1域中,找不到var和新的函式,那麼就會往它的父級作用域去找,找到了,彈出1;當遇到表示式a=2,更改了a的值!
5. 注意 函式的形參等於區域性變數
6.當遇到函式的呼叫的時候,形參a讀到是全域性變數var a =1; 傳過去的時候變成了函式的區域性變數,a = 2;改變的是函式作用域的區域性變數a,與全部變數的a沒一分錢的關係
js 的作用域 域解析 分析
作用域鏈 函式每次執行時,瀏覽器都會在函式中開啟乙個地方用來儲存函式內的區域性資料。宣告在函式內的區域性變數 這個地方就叫做作用域 scopes 作用域鏈 變數與函式的查詢規則 當我們在函式使用一條資料時,優先在本作用域 呼叫資料的函式內 去查詢這條資料,如果在本作用域,找不到這條資料,就去查詢父級...
js 的作用域 域解析 分析
作用域鏈 函式每次執行時,瀏覽器都會在函式中開啟乙個地方用來儲存函式內的區域性資料。宣告在函式內的區域性變數 這個地方就叫做作用域 scopes 作用域鏈 變數與函式的查詢規則 當我們在函式使用一條資料時,優先在本作用域 呼叫資料的函式內 去查詢這條資料,如果在本作用域,找不到這條資料,就去查詢父級...
JS作用域及域解析規則
1 js作用域 變數和函式作用的範圍。2 js解析器可以分為域解析和逐行解讀 兩個過程。域解析 1 當進行域解析的時候,一旦找到var,就會提取後面的變數名,並給它賦值給undefined。2 一旦找到function和形參,把整個函式塊賦值給函式名,把形參賦值為undefined 逐行解讀 解讀表...