JavaScript 預解釋分析
阿新 • • 發佈:2018-12-18
#預解釋
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
複製程式碼
- 示意圖如下
如果執行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關鍵字的在預解釋的時候操作還是不一樣的
- 附程式碼
//函式只有在執行的時候才會對函式內部的程式碼進行預解釋
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);
}
複製程式碼
- 附示意圖