JavaScript預編譯

函數(shù)

我們都知道, JavaScript是一種標本語言,是一種翻譯執(zhí)行的過程.

那么JavaScript的執(zhí)行中,有沒有類似編譯的過程呢?

先看一個例子:

<script>
  alert(typeof f); // function
  function f() {
    alert("Just a test!");
  };
</script>

這段代碼會彈出兩個彈窗,第一個顯示’function',第二個顯示’Just a test!'

有人會納悶,第一個alert的時候f函數(shù)還沒有被定義呀,為何會顯示類型呢 ?

其實這是因為JavaScript有預編譯的過程, JavaScript在執(zhí)行每一段代碼之前,都會首先處理var 關(guān)鍵字和function定義式(函數(shù)定義式和函數(shù)表達式).

我們都知道,在調(diào)用函數(shù)之前,會首先創(chuàng)建一個活動對象,然后搜尋這個函數(shù)中的局部變量定義,和函數(shù)定義,將變量名和函數(shù)名作為這個活動對象的同名屬性,對于局部變量定義,變量的值會在真正執(zhí)行的時候才計算,此時只是簡單的賦為undefined

而且對于函數(shù)定義式和函數(shù)表達式有一些不同之處,先看例子:

<script>
  alert(typeof f); // function
  alert(typeof another); // undefined 
  
  function f() { // 函數(shù)定義式
    alert('Just a test!');
  };
  
  var another = function() { // 函數(shù)表達式
    
  }
  
  alert(typeof another); // function
</script>

這就是函數(shù)定義式和函數(shù)表達式的不同,對于函數(shù)定義式,會將函數(shù)定義提前.而函數(shù)表達式,會在執(zhí)行過程中才計算.

變量

先看例子:

var name = 'x';
age = 100;

我們都知道不使用var關(guān)鍵字定義的變量,相當于是全局變量,聯(lián)系到上面的分析不難得出:

在對age做標識符解析的時候,因為是些操作,所以當找到全局的window活動對象的時候沒有找到這個標識符的時候,會在window活動對象的基礎(chǔ)上,返回一個值為undefined的age屬性.

也就是說,age會被定義在頂級作用域中.

生命不息,折騰不止...
I'm not a real coder,but i love it so much!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JavaScript 是一門腳本語言,其可以不經(jīng)過編譯而直接運行(這點與 Java 不同,Java 需要編譯之后才...
    AshengTan閱讀 2,126評論 2 9
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,476評論 2 36
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,674評論 0 4
  • 外面陰雨連綿。天氣預報上說氣溫6-8度,小雨。蘇小白站在窗前,他看見一輛棕色的五菱排著白色的尾氣。蘇小白突然很想打...
    蘇小白說閱讀 1,295評論 4 3
  • 說起減肥,我想這兩個沉重的字肯定是很多人一輩子奮斗的事業(yè)。看著鏡子里的自己,看著商場好看又穿不下的衣服,總是在辦完...
    學習書本以外的知識閱讀 439評論 0 0

友情鏈接更多精彩內(nèi)容