JS預解析、物件
記住一句話:JavaScript語言是單執行緒的
同步非同步:
因為JavaScript的單執行緒,因此同個時間只能處理同個任務,所有任務都需要排隊,前一個任務執行完,才能繼續執行下一個任務,但是,如果前一個任務的執行時間很長,比如檔案的讀取操作或ajax操作,後一個任務就不得不等著,拿ajax來說,當用戶向後臺獲取大量的資料時,不得不等到所有資料都獲取完畢才能進行下一步操作,使用者只能在那裡乾等著,嚴重影響使用者體驗
同步任務:
同步任務是指在主執行緒上排隊執行的任務,只有前一個任務執行完畢,才能繼續執行下一個任務
同步操作:從上到下,依次執行
非同步任務:
非同步任務是指不進入主執行緒,而進入任務佇列的任務,只有任務佇列通知主執行緒,某個非同步任務可以執行了,該任務才會進入主執行緒
非同步操作:一般是耗時較多的操作,進入等待佇列,當同步操作結束後執行
常見非同步操作:AJAX請求,定時器
定時器:setTimeout(code,等待多長時間執行)(執行一次)
setInterval(code,多長時間執行一次)(執行多次)
清除定時器
clearTimeout(定時器名)
clearInterval(定時器名)
所以建立定時器時 宣告一個定時器名字,來接受定時器的返回值
例:
//60s驗證碼---------------------------------------------------------------------------------------- var num = 60; // var str = "點擊發送驗證碼"; // console.log(str); alert("請點擊發送驗證碼"); var timer = setInterval(function(){ num --; console.log(num+"s後重試"); if(num<=1){ clearInterval(timer); console.log("請重新點擊發送驗證碼!"); } },1000) 預解析:直接編寫在 script 標籤之中的JS程式碼,都是全域性作用域;
或者是一個單獨的 JS 檔案中的。
全域性作用域在頁面開啟時建立,頁面關閉時銷燬;
在全域性作用域中有一個全域性物件 window(代表的是一個瀏覽器的視窗,由瀏覽器建立),可以直接使用。
(2)區域性作用域(函式作用域)
在函式內部就是區域性作用域,這個程式碼的名字只在函式的內部起作用
呼叫函式時建立函式作用域,函式執行完畢之後,函式作用域銷燬;
每呼叫一次函式就會建立一個新的函式作用域,它們之間是相互獨立的。
將這樣的所有的作用域列出來,可以有一個結構: 函式內指向函式外的鏈式結構。就稱作作用域鏈。
(3)隱式全域性變數
宣告變數使用`var`, 如果不使用`var`宣告的變數就是全域性變數( 禁用 )
function foo () {
var i1 = 1 // 區域性
i2 = 2, // 全域性
i3 = 3; // 全域性
}
(4)作用域及作用域鏈
全域性作用域---全域性變數
區域性作用域---區域性變數---只在當前作用域下有效
塊作用域?(js中沒有)
只有函式才能產生區域性作用域
作用域鏈的查詢規則:
先從當前的作用域中查詢,如果有,就返回
如果沒有從上一級查詢,有就返回,沒有繼續上一級查詢,直到全域性
如果全域性沒有,就報錯
物件:
JavaScript中的物件其實就是生活中物件的一個抽象。
JavaScript的物件是無序屬性的集合。
其屬性可以包含基本值、物件或函式。物件就是一組沒有順序的值。我們可以把JavaScript中的物件想象成鍵值對,其中值可以是資料和函式。
Tips:
事物的特徵在物件中用屬性來表示。
事物的行為在物件中用方法來表示。
物件建立方式:
1.物件字面量
var obj = {};
2.new Object()建立物件
var obj = new Object();
3.工廠函式建立物件
function Person(name,age){
var per = new Objict();
per.name = name;
per,age = age;
return per;
}
var lisi = Person("李四","18")
//輸出物件中的屬性值
console.log(lisi.name)
console.log(lisi["name"])
4.自定義建構函式
function Person(name,age){
this.name = name;
this.age = age;
}
var per = new Person("張三",18)
屬性和方法
1. 如果一個變數屬於一個物件所有,那麼該變數就可以稱之為該物件的一個屬性,屬性一般是名詞,用來描述事物的特徵
2. 如果一個函式屬於一個物件所有,那麼該函式就可以稱之為該物件的一個方法,方法是動詞,描述事物的行為和功能
new 關鍵字
建構函式,是一種特殊的函式。主要用來在建立物件時初始化物件,即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。
1.、建構函式用於建立一類物件,首字母要大寫。
2.、建構函式要和new一起使用才有意義。
new在執行時會做四件事情:
1、new會在記憶體中建立一個新的空物件
2、new會讓this指向這個新的物件
3、new會返回這個新物件
物件的使用
遍歷物件:
for(key in 物件名){
console.log(物件名 . 屬性名);
console.log(物件名["屬性名"]);
}
刪除物件屬性
delete obj . 屬性名