js中關於聲明提早的幾個誤區

聲明提早: 函數

  在程序正式執行以前,都會將全部的var聲明的變量提早到開始位置,集中建立,而賦值留在原地。spa

例如這樣一段代碼code

console.log(a)
var a = 100;
console.log(a);
var a = 200;
console.log(a);

console.log(b);
b = 10;
console.log(b);

聲明提早以後實際上運行的前後順序是blog

var a;
console.log(a)    //undefined
a = 100;
console.log(a);  // 100
a = 200;
console.log(a);   // 200

console.log(b);   // ReferenceError
b = 10;
console.log(b);   // 10

//只要碰到聲明提早的問題,都要先提早,再判斷輸出
//代碼中a變量的聲明應提到做用域最前面,注意js中只有全局做用域和函數做用域
// 賦值留在原地,只聲明沒賦值的爲Undefined 
// 變量b 沒有聲明而直接使用  會報錯,可是未聲明直接賦值的話,js中就會自動爲其建立同名變量,再保存數據,不會出錯。
// 所以從一個未聲明過的變量中取值 會出錯

函數中: 在程序執行以前或者函數被調用前,將var聲明的變量和function聲明的函數提到當前做用域頂部集中建立,賦值留在原地。作用域

注意:io

匿名函數 (定義時不指定函數名的函數)  定義完馬上執行,執行完馬上釋放,只有肯定函數值執行一次時使用,不提早console

匿名函數自調:定義在哪兒,就在哪執行,不提早。function

相關文章
相關標籤/搜索