預解析
函式要先定義後呼叫不是指**書寫順序
舉個栗子
函式的兩種字面量的定義方式:1
console.
log(
add())
;//1 console在前
function
add(no1,no2)
function
add(no1,no2)
//函式宣告不加;
console.
log(
add())
;// 1 console語句在後
結果都能正常列印1
下面是另外一種字面量定義的方式
2function宣告
console.
log(
add())
;// undefined console語句在前
varadd
=function()
;//語句加;
var 賦值表示式
var
add=
function()
; console.
log(
add())
;// 1 console語句在後正常
根本原因
瀏覽器的預解析機制
在全域性作用域找到`function var` 這兩個關鍵字
找到function 函式宣告會將函式提前定義一遍,已經知道add是什麼玩意兒了,
找到varvar xx=undefined
直到執行到賦值**才會改變初始定義的undefined
預設值。
找到的下面語句
var add =
function()
;
只會定義var add = undefined;
預解析機制
js在預解析階段先找所有宣告,如果是var 先給var後的變數定乙個undefind 如果是function 就把function當做字元創賦給函式名 如果名字形同的情況function會把覆蓋var 後面function會覆蓋前面function 1.定義 預解析 在當前作用域下,js執行之前,會...
js解析器的執行原理
首先看一段 我是span 的執行順序是從上往下的,當 執行到script標籤時,也就開始執行js 了。執行js 一般分兩步 1.預解析 2.逐行執行 預解析 呢,主要會把var function 引數等一些東西 儲存進倉庫裡面 記憶體 1.var 一般用於宣告變數,預解析 的時候,等號後面的賦值過程...
js解析器的執行原理
alert a var a 1 function a alert a var a 3 alert a function a alert a 上面 的執行順序是從上往下,當 執行到script標籤時,開始執行js 執行js 一般分兩步 1.預解析 2.逐行執行 第一步 預解析 預解析 主要會把var ...