一般來說我們工程師的執行環境有兩種
各家瀏覽器都有他自己的js引擎,所以才會發生有些語法在這個瀏覽器可以跑,另一個又不行這邊簡單介紹最強與最廢
一般來說一個瀏覽器引擎有兩個,一個接口
每個JS引擎都實現了一個版本的 ECMAScript,例如IE11就是實現ES5,所以完全不能使用ES6的語法
每個JS引擎自帶一個優化虛擬機,會自動幫你的JS文檔 建構模塊 其中包括分析、解釋、優化、垃圾回收你所寫出來的東西
運作模式如下
好的,那麼來開始說說AJAX是怎麼一回事吧
今天不管是寫VUE 用Axios
或著是寫一般網頁用jQuery
(但請尊重時代的進步,不要導了整個Jquery然後只用ajax)
以jquery舉例
function(){
dothing.....
$.ajax({
type: "method",
url: "url",
data: "data",
dataType: "dataType",
//async: false
success: function (response) {
}
});
dothing2.....
}
如果今天執行了這個方法那麼最有可能的執行順序是甚麼呢?
如果今天瀏覽器引擎、接口、通通都是單一執行緒的話就是1
言下之意就是,一般來說會是工程師非預期的2
哪尼?!
JS不是單執行緒為何會跳著執行?
其實這個方法的執行步驟如下
沒錯在第二步時,js仍然是單一執行緒
只是有些事情被瀏覽器別的部分( HTTP Request)拿去運行
而一般網路沒有光速快到還沒執行dothing2而就接到url的回傳
因此造成了工程師的非預期結果
所以有時候我們會加上下面這東西來避免這種情況發生
或著乾脆一個方法就直接指運行ajax
async: false
語法解析器(Syntax Parser)
在讓電腦看得懂我們這群程序猿們到底在叫他們做些甚麼換香蕉
剛剛稍微提到過就是把文檔變字符串,然後變程式碼,也就是說可以理解成當語法解析讀到var、let、const時就明白,現在要切一塊地方宣告變數、當讀到function時就會知道這個東西會被提升(hoisting),
hoisting這個js中很神奇的步驟會在後面的文章提到
詞彙環境(Lexical Environment)
名稱/值(Name/Value)
全域環境與全域物件
var obj={
person:{
gender: '男',
position: 'coder',
info: {
weight: 90,
height : 200
},
dothing: function(time){
if(time==1700){
下班();
}
}
}
}
好的這就是一個物件的基本型態
一個變數之中有許多的key/value
在js中function也可以是value在一般情況下與字符串沒有差別
只是加上()圓括號就可以執行裡面的程式碼
全域物件與全域環境會在這個頁面一開啟,JS引擎變會產生一個叫做(window)的物件,其中放置了這個頁面的所有訊息
當然如果我們有變數宣告在"方法體之外"這個變數也會變成全域變數
更詳盡的東西我們也會在四天後進行說明