1. 程式人生 > 其它 >JS預解析、物件

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) 預解析:
(1)函式提升 (2)變數提升 (3)函式同名同名的函式,後面的會覆蓋前面的 (4)變數和函式同名   當出現變數宣告和函式同名的時候,只會對函式宣告進行提升,變數會被忽略 (5)預解析是分作用域的 (6)函式表示式不會提升 作用域: (1)全域性作用域

  直接編寫在 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 . 屬性名