1. 程式人生 > >JavaScript 預解釋分析

JavaScript 預解釋分析

#預解釋

1. JS基礎知識

1.1 先介紹js的基本資料型別

  • 基本資料型別 --- 值操作
  • 有number、string、boolean、null、undefined
  • 引用資料型別 ---- 引用地址
  • object、array、Date

1.2 執行環境

  • 當瀏覽器載入HTML頁面的時候,首先會提供一個供全域性JS程式碼執行的環境 --- 全域性作用域(global/window)
  • 如下程式碼是在script中
var num = 12;
var obj = { name:"houdashuaige", age:18 };
function fn(
)
{ console.log("好好學習 天天向上"); } console.log(fn) //把整個函式定義的部分(函式本身)在控制檯輸出 console.log(fn()) //輸出當前函式的執行返回結果 fn()//return 後面是啥 返回啥 如果沒有return 返回undefined 複製程式碼
  • 示意圖如下
    avatar
如果執行obj.age = 20;
首先通過地址xxxfff000 找到對應的空間 然後把空間中age屬性對應的屬性值修改為20;
其中fn儲存的是一個地址 代表的時當前函式的整體

複製程式碼

2. 預解釋

2.1 預解釋的基本概念

在當前的作用域中,JS程式碼執行之前,瀏覽器首先會預設地把所有帶var、function
的進行提前的宣告或者定義 複製程式碼

2.1.1 理解宣告(declare)和定義(defined)

var num = 12;
宣告: var num; //告訴瀏覽器在全域性作用域中有一個num的變數

定義: num = 12(發生在程式碼執行過程中 不在預解釋中);  //給變數進行賦值

function fn() {
    console.log("this is a test");
}
函式預解釋
fn = xxxfff000; 
宣告: fn //告訴瀏覽器在全域性作用域中有一個fn的函式
定義: fn = xxxfff000; //給fn賦值 指向函式的地址
複製程式碼

註釋: 所以對於帶var 和 function關鍵字的在預解釋的時候操作還是不一樣的

var: 對於帶var的變數 預解釋只會宣告 不會進行定義 function: 在預解釋的時候宣告+定義 一起完成了

  • 附程式碼
//函式只有在執行的時候才會對函式內部的程式碼進行預解釋
console.log(num);// undefined 提前宣告 但未定義 預設undefined
var num = 12;
console.log(num);// 12
var obj = { name: "hou", age: 7 };

fn(100,200);//程式碼可以在這執行 因為預解釋的時候 宣告+名義就已經完成了

function fn(num1,num2) {
    var total = num1 + num2;
    console.log(total);
}

複製程式碼
  • 附示意圖
    avatar

    相關推薦

    JavaScript 解釋分析

    #預解釋 1. JS基礎知識 1.1 先介紹js的基本資料型別 基本資料型別 --- 值操作 有number、string、boolean、null、undefined 引用資料型別 ---- 引用地址 object、array、Date 1.2 執行環境 當瀏覽器載入H

    JavaScript解釋是一種毫無節操的機制

    前言 JavaScript是一門解釋型的語言 , 想要執行JavaScript程式碼需要兩個階段 編譯階段: 編譯階段就是我們常說的JavaScript預解釋(預處理)階段,在這個階段JavaScript直譯器將完成把JavaScript指令碼程式碼轉換到位元組碼 執行階段: 在編譯階段Java

    JavaScript編譯原理分析

    ole ram 語言 screen 三部曲 window pri nts define 今天用了大量時間復習了作用域、預編譯等等知識 看了非常多博文,翻了翻曾經看過

    JavaScript中的解釋

    首先來介紹一下JavaScript中的資料型別。JavaScript中有兩大基本資料型別:(1)基本資料型別        number、string、undefined、boolean、null(2)引用資料型別        Object:物件{}、陣列、正則、Date 

    Dom 事件和JavaScript的詞法分析過程

    javascript dom event dom自帶了很多事件,常見的如下所示當觸發這些事件的時候,我們可以執行自定義的各種函數。一般說來,綁定事件有3種方法。第一種方法,直接在標簽上面綁定,比如<input id=‘i1‘ type=‘button‘ onclick=‘ClickOn(th

    解釋題的一點小方法和小技巧

    改善 返回值 第一次 都是 做出 cti 條件判斷 false 回調函數 在JavaScript中的函數理解中預解釋是一個比較難懂的話題。原理雖然簡單,寥寥數言,但其內涵卻有深意,精髓難懂。如何在輕松活躍的頭腦中將它學會,現在針對我在學習中的一點小竅門給大家分享一

    JS解釋的總結

    命名 代碼執行 提前 變量 內存 fin 也會 屬性 func 預解釋階段發生在創建了堆內存,讓代碼執行之前,對當前作用域中帶var和function的進行預解釋 在瀏覽器解析執行代碼的時候,會提前把帶var和function的代碼聲明或定義,提前放在作用域的最前面執

    淺談JavaScript編譯原理

    全局變量 obj 預處理 http 對象 自然 net jet object 這兩天又把js的基礎重新復習了一下,很多不懂得還是得回歸基礎,大家都知道js是解釋性語言,就是編譯一行執行一行,但是在執行的之前,系統會做一些工作: 1,語法分析; 2,預編譯; 3,解釋執行。

    javascript覽圖片——IT輪子系列(九)

    webkit 分享圖片 解決 web name javascrip 問題 預覽 上傳 再使用htm控件 <input type="file" name="file" /> 上傳圖片的時候,往往需要先預覽圖片,然後點擊保存按鈕,把圖片上傳到服務器。今天正好解決

    [js]js中4種無節操的解釋情況

    scrip 是否 if語句 orange 表達 一個 報錯 body fun js中4種無節操的預解釋情況 - 1. if語句即使條件不成立,條件裏的表達式也會進行預解釋. - 2. 匿名函數的預解釋: 只對等號左邊與解釋 - 3. 自執行函數的預解釋: 不進行預就解釋,

    [js]js的惰性聲明, js中聲明過的變量(解釋),後在不會重新聲明了

    type 惰性 err alt inf body png 技術分享 console js的惰性聲明, js中聲明過的變量(預解釋),後在不會重新聲明了 fn(); // 聲明+定義 js中聲明過一次的變量,之後在不會重新聲明了 function fn() { c

    解釋是一種毫無節操的機制

    efi window def 們的 函數定義 fin 聲明 賦值 定義 預解釋是毫無節操的一種機制,自從學了預解釋,從此節操是路人 1.預解釋的時候,不管你的條件是否成立,都要把帶var的進行提前的聲明   // window的預解釋:var num;-》window.nu

    javascript名詞解釋

    time 方法 string 增刪改 所有 boolean val scree interval javascript名詞解釋 javascript語言由三部分組成,分別是DOM,BOM和語言基礎 1.1.DOM 是Document Object Model( 文檔對象模型

    HTTP頭部信息解釋分析(詳細整理)

    標識 def cti web服務器 通用頭 upgrade auth 完成 rim HTTP 頭部解釋 以下內容摘抄於:https://www.cnblogs.com/jiangxiaobo/p/5499488.html 1. Accept:告訴WEB服務器自己接

    javascript解析和函式做引數

    1. 預解析:提前解析程式碼 console.log("num");// 輸出-undefined var num=10; 預解析是: var num; console.log("num");// 輸出-undefined num=10; 2. arguments 物件 可將獲取的多個值

    javascript解析詳解

    ole 標簽 scrip defined cti con body his 字符串 1、定義 預解析:在當前作用域下,js運行之前,會把帶有var和function關鍵字聲明的變量先聲明,並在內存中安排好。然後從上至下解析js語句。而且function的聲明優先於var聲明

    HTTP頭部資訊解釋分析(詳細整理)

    HTTP 頭部解釋  以下內容摘抄於:https://www.cnblogs.com/jiangxiaobo/p/5499488.html 1. Accept:告訴WEB伺服器自己接受什麼介質型別,*/* 表示任何型別,type/* 表示該型別下的所有子型別,type/sub

    珠峰JS筆記1.1(解釋,作用域鏈,this)

    { js 資料型別 基本資料型別:number, string , boolean, undefined, null 引用資料型別: {} 物件 , [ ] 陣列, /**/ 正則, Date, function 本質區別: 基本資料型別是按值來操作的,而

    JavaScript編譯詳解

    Js的兩個特點:單執行緒,解釋性語言(翻譯一句執行一句)。 語法分析:通篇掃描,語法錯誤 預編譯: 函式宣告整體提升 變數,宣告提升 解釋執行: imply global 暗示全域性變數:即任何變數, 如果變數未經宣告就賦值,此變數就為全域性變數所有(window),不會報錯。 一切宣告

    在 Cef 中實現 C++ 與 JavaScript 互動場景分析

    此文已由作者鄧佳佳授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗 本文主要介紹 CEF 場景中 C++ 和 JavaScript 互動(以下簡稱 JS Bridge)中的一些重要節點,包括了 C++/JavaScript 的方法註冊、方法呼叫、回撥管理。以下是一些