定義階段:
1.宣告式函式
function fn() {}
2.賦值式函式
var fun=function () {}
呼叫階段:
宣告式函式可以在宣告之前呼叫,也可以在宣告之後呼叫
賦值式函式只能在宣告之後呼叫
1.開闢乙個儲存空間
2.把函式體內的**一模一樣的儲存在這個空間中(不解析變數)
3.把空間的位址給到變數名
1.按照函式名儲存的位址找到對應的儲存空間
2.形參賦值
3.預解析
4.把儲存空間內的**拿出來執行一遍(解析變數)
形參:
兩種引數數量一致:一一對應
實參多:前面一一對應,多出來的實參在函式體內沒有變數接受
形參多:前面一一對應,多出來的沒有實參賦值,函式體內使用的時候就是undefined
是在所有的**執行之前對**進行通讀並解釋
1.var關鍵字的時候,告訴瀏覽器變數名可以使用,但沒有賦值
2. 宣告式函式,告訴瀏覽器函式名可以使用,並且這個變數名的值是乙個函式位址
(當函式和變數重名的時候,在預解析階段以函式為準)
預解析的無節操:
1.不管if條件是否成立,**塊裡面的**會進行預解析
2.return後面的**雖然不執行,但是會進行預解析
fn()
var fn=
100fn()
functionfn(
)fn()
預解析:
1.var fn
2.functionfn(
)預解析結束的時候,瀏覽器記錄的fn是乙個函式
**執行:
1.fn()
/把fn當函式執行
2.fn=
100/ 賦值為100,記錄的函式沒有了
3.fn()
/當函式執行 報錯 fn is not a function
4.fn
()
fn()
functionfn(
)fn()
var fn=
100fn()
預解析:
1.functionfn(
)2.var fn
預解析結束的時候,瀏覽器記錄的fn是乙個函式
**執行:
1.fn()
/把fn當函式執行
2.fn()
/當函式執行
3.fn=
100/ 賦值為100,記錄的函式沒有了
4.fn()
/報錯
1.編寫乙個函式,計算三個數字的大小,按照從小到大的順序輸出
functionfn(
)if(arguments[i]
>max)
}for
(var j=
0; j< arguments.length; j++)}
console.
log(min,center,max)}fn
(12,8
,11)
2.判斷區間內的質數
//判斷是不是質數
function
fn(n)
return flag
}}// var res=fn(100)
// console.log(res)
function
fun(a,b)}}
fun(
100,
200)
js 預解析以及變數的提公升
js在執行之前會進行預解析。什麼叫預解析?預 提前 解析 編譯 預解析通俗的說 js在執行 之前會讀取js 會將變數宣告提前。注意 只是提公升變數,並不是提公升變數賦值。對於es6中的let不具體 變數提公升。例子 1如上 不並不會報錯,因為在之前js 之前,在預解析的時候,顯示宣告的函式 test...
預解析和變數提公升
doctype html en utf 8 viewport content width device width,initial scale 1.0 document title head var f functionf console.log f f 123 var fn 123 functio...
預解析 變數提公升 相關題
預解析 瀏覽器在解析js的過程中,至少有兩步,預解析,逐行執行。預解析 找一些東西,找var function,把var 和function的宣告提到最前面。找var 提前宣告一下變數,儲存在記憶體中,如果變數同名宣告一次。function 提前宣告函式,儲存在記憶體中,如果同名會多次宣告。逐行執行...