榆林做網(wǎng)站多少錢seo顧問服
01 準(zhǔn)備
JavaScript中函數(shù)是對(duì)象。我們后續(xù)描述構(gòu)造函數(shù)的內(nèi)存模型時(shí),會(huì)將構(gòu)造函數(shù)稱為構(gòu)造函數(shù)對(duì)象。
02 數(shù)據(jù)類型
typeof 運(yùn)算符來查看值的類型,它返回的是類型的字符串值
==
會(huì)做數(shù)據(jù)轉(zhuǎn)換
03 相關(guān)問題
04數(shù)據(jù)_變量_內(nèi)存
05相關(guān)問題1
06相關(guān)問題2
07對(duì)象
08函數(shù)
09回調(diào)函數(shù)
10 lIFE
11 函數(shù)中的this
12 關(guān)于語句分號(hào)問題
13 webstorm設(shè)置
14 復(fù)習(xí)
15、函數(shù)的prototype
function Func() { }
console.log(Func);
console.log(Func.prototype);
輸出:
每個(gè)函數(shù)都有一個(gè)prototype屬性,它默認(rèn)指向一個(gè)0bject空對(duì)象(即稱為:原型對(duì)象)
function Func() { }
console.log(Func.prototype.constructor === Func);// true
console.log(Date.prototype.constructor === Date);// true
給原型對(duì)象添加屬性、方法,函數(shù)的所有實(shí)例對(duì)象自動(dòng)擁有原型中的屬性(方法)
function Func() { }
Func.prototype.name = "LCM";
Func.prototype.hello = function(){console.log("hello world!");
}
let f = new Func();
console.log(f.name);//LCM
console.log(f.hello());//hello world!
16、顯式原型和隱式原型
function Fun(){}console.log(Fun.prototype);let f = new Fun();console.log(f.__proto__);console.log(Fun.prototype === f.__proto__);
__proto__
和 prototype
中保存的都是原型對(duì)象的地址值。
Fun的prototype、f的__proto__屬性什么時(shí)候加的?
JavaScript引擎在解析Fun代碼的時(shí)候就創(chuàng)建了(內(nèi)部代碼應(yīng)該是:this.prototype={});
f的__proto__在new創(chuàng)建對(duì)象的時(shí)候加的(this.proto = Fun.prototype )
17、原型鏈
?????????? 記住:實(shí)例對(duì)象的隱式原型等于構(gòu)造函數(shù)的顯式原型;
所有函數(shù)對(duì)象的隱式原型都是一樣的,都是Function對(duì)象的原型對(duì)象,因?yàn)槎际?code>new Function產(chǎn)生的();
??????????特殊:Function對(duì)象的隱式原型和顯式原型是同一個(gè)
Object構(gòu)造函數(shù)對(duì)象的隱式原型也是Function的顯式原型。也就是說Object的構(gòu)造函數(shù)對(duì)象也是new Funtion()
創(chuàng)建的。
18 原型鏈-補(bǔ)充
19 原型鏈屬性問題
20 探索instanceof
instanceof的作用:左面對(duì)象是不是右面構(gòu)造函數(shù)對(duì)象的實(shí)例
21 原型- 面試題
題1
題2
function Foo() { }Object.prototype.f1 = function () {console.log("f1()");
}
Object.prototype.f2 = function () {console.log("f2()");
}let f = new Foo();
f.f1();// => f1()
f.f2();// => f1()Foo.f1();// => f1()
Foo.f2();// => f1()
22 變量提升與函數(shù)提升
22.1 變量提升
var a = 3;
function fn() {console.log(a);// undefinedvar a = 4;
}
fn();
輸出undefined,因?yàn)樯厦娲a會(huì)轉(zhuǎn)化為下面的代碼,變量做了提升
var a = 3;
function fn() {var a;console.log(a);// undefineda = 4;
}
fn();
22.1函數(shù)提升
23 執(zhí)行上下文
??????????
執(zhí)行第一行代碼前,JavaScript已經(jīng)準(zhǔn)備好了全局上下文,并已經(jīng)在window對(duì)象中添加了屬性和方法。注意:此時(shí)還沒有給對(duì)象賦值,方法
23.1 全局執(zhí)行上下文
23.2 函數(shù)執(zhí)行上下文
調(diào)用函數(shù)時(shí)
第1步:在準(zhǔn)備執(zhí)行函數(shù)體之前,會(huì)在調(diào)用棧創(chuàng)建一個(gè)棧幀壓入調(diào)用棧中。一個(gè)函數(shù)對(duì)應(yīng)一個(gè)棧幀
第2步:對(duì)局部數(shù)據(jù)進(jìn)行預(yù)處理
(1)形參變量==>賦值(實(shí)參)>添加為執(zhí)行上下文的屬性
(2)arguments>賦值(實(shí)參列表),添加為執(zhí)行上下文的屬性
(3)var定義的局部變量==>undefined,添加為執(zhí)行上下文的屬性
(4)function聲明的函數(shù) >賦值(fun),添加為執(zhí)行上下文的方法水
(5)this>賦值(調(diào)用函數(shù)的對(duì)象)
第3步:開始執(zhí)行函數(shù)體代碼
24 執(zhí)行上下文棧
25 面試題
26 復(fù)習(xí)
27 作用域與作用域鏈
自己的作用找不到就向上面的作用域找,一直找到最頂層-全局上下文中。
作用域鏈
28作用域_面試題
29 循環(huán)遍歷加監(jiān)聽
/* 閉包 */
for (let i = 0; i < buttons.length; i++) {(function (i) {//這里的i是局部變量buttons[i].onclick = function () {alert("第" + (i + 1) + "按鈕")}})(i)// 這里的i是全局變量
}
30 閉包理解
什么時(shí)候產(chǎn)生閉包,外部函數(shù)調(diào)用時(shí),包含外部函數(shù)數(shù)據(jù)的內(nèi)部函數(shù)被解析了,此時(shí)會(huì)產(chǎn)生閉包。
31 常見的閉包
32 閉包的作用
33 閉包的生命周期
34 [閉包,應(yīng)用_自定義JS模塊
(1)方式1
(2)方式2
34-1 閉包的缺點(diǎn)-內(nèi)存溢出和內(nèi)存泄漏
35 內(nèi)存溢出與內(nèi)存泄露
36 面試題
題1
題2
37 對(duì)象創(chuàng)建模式
(1)Object構(gòu)造函數(shù)模式
(2)對(duì)象字面量模式
(5)
38 原型鏈繼承
(1) 原型鏈繼承
39 組合繼承
(2)借用構(gòu)造函數(shù)
(3)原型鏈 + 借用構(gòu)造函數(shù)
40 復(fù)習(xí)
41 閉包終極面試題
42 進(jìn)程與線程
43 瀏覽器內(nèi)核
44 定時(shí)器引發(fā)的思考
45 js是單線程執(zhí)行的
46 事件循環(huán)模型
47 H5 web Workers多線程