var變量的提高

JS代碼解析原則javascript

  首先js引擎在讀取js代碼時會進行兩個步驟,第一個步驟是解釋,第二個步驟是執行。java

所謂解釋就是會先通篇掃描全部的js代碼,而後把全部聲明提高到頂端,第二步是執行,執行就是操做一類的。函數

案例1:spa

<script type="text/javascript">   
  console.log(a);   
  var a=10;
</script>

以上代碼輸出undefinedip

  緣由:變量提高(把變量聲明提高到當前執行環境的最頂端)it

以上這段代碼至關於:io

  var a ;console

  console.log(a);function

  a=10;變量

案例2:

<script type="text/javascript"> 
  foo();
  function foo() {
    console.log("aaa");
  }
</script>

結果輸出:aaa

原理:函數聲明提高(函數聲明提高直接把整個函數提到執行環境的最頂端)

至關於:

function foo() { 
  console.log("aaa");
}
foo();

 變量提高只提高函數名,而函數提高會提高整個函數題。注意:函數提高在變量提高上面。

案例3:

 foo(); 
foo=function() {
  console.log("aaa");
}

 運行結果是:foo is not a function

緣由:仍是進行了變量提高

至關於:

var foo; 
console.log(foo);//undefined
foo();//foo is not a function
foo=function() {
  console.log("aaa");
}

 上面代碼輸出undefined是由於變量提高後並無賦值所以輸出undefined

輸出foo is not function 緣由是:js解析遇到foo()時會默認當作函數來解析

案例4:

console.log(foo); 
var foo=10;
function foo() {
  console.log(10);
}
console.log(foo);

輸出結果:

f foo(){

  console.log(10);

}

10

10

>

原理:

至關於:

function foo() { 
  console.log(10);
}
var foo;
console.log(foo);
foo=10;
console.log(foo);
console.log(foo);

注意:函數提高在變量提高上面,第一個console.log(foo);爲何會輸出函數題呢。緣由在於var foo;並未有賦值只是聲明,所以他會調用上面的值

例如:

var  b=10;

b=10;

console.log(b);//10 輸出上一個值不會輸出undefined

可是更改後:

var b =10;

b=20;

console.log(b);//20 輸出20不是上一個值

 

總結:關於變量提高,必定要注意細心思考一下,還有就是,函數提高在變量提高之上。

提高的順序是:函數-->變量提高

變量的提高就是先把全部的變量的定義先提取出來,而後再開始對變量去賦值。

相關文章
相關標籤/搜索