淺談變量提升


變量提升是面試中非常常見的一個問題

比如 var 和 let 的區別是什么?

答案之一就有 let 不會變量提升

 

1.概念

最基礎的概念大家都知道

console.log(a);
var a = 1;

// 輸出 undefined

 

在代碼中 使用 var 來聲明變量的時候,會提到當前作用域的頂端,而賦值操作在原處不變

上面的兩行代碼相當於

var a;
console.log(a);
a = 1;

 var a聲明向上提升,a=1賦值留在原處

 

2.多個script的情況

<script>
console.log(a)
</script>
<script>
var a = 1;
</script>
// 控制台報錯

 這樣控制台就報錯了

ReferenceError: a is not defined

變量提升不能跨script

 

3.其它情況

首先看不用var直接賦值

console.log(a);  //ReferenceError: a is not defined
a = 1;

 同樣報錯,因為使用 var才會變量提升(我所知)

 

在 if  中

  console.log(a) // undifined
  if(false){
    var a = 1;
  }

 盡管 if 不通過,還是提升了

 

4.函數提升

變量聲明會提示,函數聲明也會

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

    }
    console.log(foo);
  //輸出 function a,10,10

 函數會優先於變量  先提升

上面代碼相當於

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

console.log(a);

 

當時,如果用函數表達式,那就只提升了這個 a變量,符合之前的變量提升的邏輯

    a();
    var a = function () {
      console.log(1)
    }
//TypeError: a is not a function

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM