理解作用域,重要的是理解 js 解釋**的規範,js 在解釋**的時候會執行這2個步驟:
預解釋js 會對 var function 引數做乙個預解釋,儲存起來
逐行解釋
完成預解釋後,會逐行解釋**
例子1
console.
log(a)
var a =
1
執行上面的**,輸出的是:
undefined
跟著上面的步驟走就是:
1.預解釋:
會去尋找有 var 、function、引數,那麼上面的例子會找到 乙個var a
將它存為undifined
2.逐行解釋:
console.log(a)
就會輸出乙個undifined
例子 2
console.
log(a)
var a =1;
function
fn1();
fn1();
var a =3;
function
fn1(
)fn1()
console.
log(a)
執行上面的**,輸出的是:
undefined44
4
步驟分析
預解釋
var a = undefined ;
fn1 = function fn1();
var a = undefined;
fn1 = function fn1()
經過預解釋後a = undefined;
fn1 = function fn1()
2. 逐行解釋
console.
log(a)
=>
//輸出a undefined
var a =1;
=>
// a 賦值為 1
function
fn1();
fn1();
// 呼叫 fn1 經預解釋 fn1 = function fn1()
//所以這裡賦值 a = 4; 輸出a 為 4
var a =3;
//又重新賦值 a = 3;
function
fn1(
)fn1()
console.
log(a)
//輸出 a 為 4
Javascript常見知識點
jquery d ocum ent rea dy 與win dow.onlo ad的區 別1.執行 時間wi ndow onl oad必 須等到頁 麵內包括 的所 有元素加 載完畢後 才能執行 document ready 是dom結構繪製完畢後就執行,不必等到載入完畢。2.編寫個數不同 windo...
javascript知識點彙總
function vartest console.log x 2 function lettest console.log x 1 var arr1 new array a b c 這是乙個預定義的陣列,在建立時初始化 var arr2 a b c 同樣是在建立時初始化,但是這種建立更為簡潔直觀 v...
JavaScript知識點之 delete操作符
delete操作符來刪除乙個隱式宣告的全域性變數,也就是沒有使用var定義的全域性變數.如果delete操作符刪除成功,則被delete的屬性已從所屬的物件上徹底消失,隨後,該物件的原型上可能存在的乙個同名屬性會被繼承.一些物件的屬性不能被delete.ecma 262 規範中把這些屬性標記為 do...