成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript難點(diǎn)筆記

WrBug / 3458人閱讀

摘要:是班的學(xué)生構(gòu)造函數(shù)的就是由這個(gè)構(gòu)造函數(shù)得到的對(duì)象的原型對(duì)象父類(lèi)對(duì)象構(gòu)造函數(shù)的對(duì)象就是實(shí)例化對(duì)象和的原型對(duì)象。由于的所有對(duì)象都是構(gòu)造函數(shù)只有除外。

前言

由于工作需求重新回顧了一下JavaScript,以下內(nèi)容是我以前的學(xué)習(xí)筆記和其他參考資料整理完善后的內(nèi)容,都是常用到的,使用頻率比較高的,自己必須得精通的知識(shí)點(diǎn)的總結(jié),便以后再?gòu)?fù)習(xí)參考。

第一章 JavaScript原型對(duì)象與原型鏈 1.1 構(gòu)造函數(shù)的缺點(diǎn)

自定義對(duì)象時(shí),以構(gòu)造函數(shù)為模板,對(duì)象的屬性和方法,可以定義在構(gòu)造函數(shù)內(nèi)部。每當(dāng)獲取對(duì)象時(shí)都會(huì)在內(nèi)存中創(chuàng)建新的對(duì)象屬性和方法,這既是增加頁(yè)面代碼量有浪費(fèi)內(nèi)存(系統(tǒng)資源)。

同一個(gè)構(gòu)造函數(shù)的對(duì)象實(shí)例之間無(wú)法共享屬性,而所有的方法都是同樣的行為,因此屬性和方法完全應(yīng)該共享。但無(wú)法共享這就是缺點(diǎn)。

function Student(Name,Class){
    this.name=Name;
    this.class=Class;
    this.f=function(){
        console.log(this.name+"是"+this.class+"班的學(xué)生");
    }
}
//此時(shí),每當(dāng)?shù)玫揭粋€(gè)對(duì)象實(shí)例,就會(huì)多一個(gè)“01”的班,浪費(fèi)內(nèi)存,
//因?yàn)橹挥幸粋€(gè)班,而學(xué)生兩個(gè),只在內(nèi)存中存在一個(gè)班級(jí)而學(xué)生不一樣就可以了,但構(gòu)造函數(shù)無(wú)法實(shí)現(xiàn)
var Stu1=new Student("Aklman","01");
var Stu2=new Student("Ahmatbek","01");
Stu1.f();
Stu2.f();
1.2 prototype屬性

JavaScript中每一個(gè)對(duì)象都繼承另一個(gè)對(duì)象,父類(lèi)對(duì)象稱(chēng)之為“原型”(prototype)對(duì)象。只有null除外,其他都有自己的原型對(duì)象

而原型對(duì)象上的所有屬性和方法,都能被派生(子類(lèi))對(duì)象共享。通過(guò)構(gòu)造方法生成生成實(shí)例化對(duì)象時(shí),會(huì)自動(dòng)生成實(shí)例化對(duì)象分配原型對(duì)象。每一個(gè)構(gòu)造方法都有一個(gè)prototype屬性,這個(gè)屬性就是實(shí)例化對(duì)象的原型對(duì)象。

function Student(Name,Class){
    this.name=Name;
    this.f=function(){
        console.log(this.name+"是"+this.class+"班的學(xué)生");
    }
}
//構(gòu)造函數(shù)的prototype就是由這個(gè)構(gòu)造函數(shù)得到的對(duì)象的原型對(duì)象(父類(lèi)對(duì)象)
Student.prototype.class="01";
var stu1=new Student("aklman");
var stu2=new Student("ahmatbek");
stu1.f();
stu2.f();

構(gòu)造函數(shù)Student的prototype對(duì)象就是實(shí)例化對(duì)象stu1和stu2的原型對(duì)象。在原型對(duì)象上添加一個(gè)color屬性。結(jié)果,實(shí)例化對(duì)象都能讀取屬性。實(shí)現(xiàn)屬性共享;

原型對(duì)象的屬性不是實(shí)例化對(duì)象自身的屬性。但是只要修改原型對(duì)象,變動(dòng)會(huì)立刻回提現(xiàn)到所有實(shí)例化對(duì)象上。

如果實(shí)例化對(duì)象自身就有某個(gè)屬性或方法,那么原型對(duì)象上的屬性和方法便會(huì)失效:
function Student(Name,Class){
    this.name=Name;
    this.f=function(){
        console.log(this.name+"是"+this.class+"班的學(xué)生");
    }
}
//將class屬性,賦值給原型對(duì)象,此后所有對(duì)象共享class屬性
Student.prototype.class="01";
var stu1=new Student("aklman");
var stu2=new Student("ahmatbek");
//為stu2對(duì)象定義class屬性,原型對(duì)象的class屬性則失效,也就是說(shuō)在stu2上的屬性發(fā)生變化
stu2.class="02";
stu1.f();
stu2.f();
總結(jié):原型對(duì)象的作用就是定義所有數(shù)理化對(duì)象共享的屬性和方法。這也是他被稱(chēng)為原型對(duì)象的原因,而實(shí)例化對(duì)象可以視作從原型對(duì)象衍生出來(lái)的子對(duì)象。

由于JavaScript的所有對(duì)象都是構(gòu)造函數(shù)(只有null除外)。而所有構(gòu)造函數(shù)都有prototype屬性(其實(shí)是所有函數(shù)都有prototype屬性),所以所有對(duì)象都有自己的原型對(duì)象。

1.3 原型鏈

對(duì)象的屬性和方法,有可能是定義在自身內(nèi),也有可能是定義在它的原型對(duì)象上。由于原型對(duì)象本身也是對(duì)象,又有自己的原型,所有生成了一條原型鏈(prototype chain)。例如,a對(duì)象是b對(duì)象的原型,b對(duì)象是c對(duì)象的原型,依次類(lèi)推。

如果那么一層層地上溯,所有對(duì)象的原型最終都可以上溯到Object對(duì)象上。Object對(duì)象也有原型就是一個(gè)沒(méi)有任何屬性和方法的null對(duì)象,而null對(duì)象沒(méi)有自己的原型。

獲取對(duì)象的原型對(duì)象:

function Student(Name){
    this.name=Name;
}
var stu1=new Student("aklman");
console.log(Student.prototype);
console.log(Student.prototype.constructor.prototype);
//由于對(duì)象自身直接獲取原型對(duì)象,最終的大對(duì)象就是object,也就是說(shuō),在JavaScript中所有對(duì)象(不管從何而來(lái))都基于object大對(duì)象,而最大對(duì)象Object的原型指向null,也就是沒(méi)有
console.log(stu1.__pro__.__proto__.__proto__);

原型鏈的作用是讀取對(duì)象某個(gè)屬性時(shí),JavaScript引擎先尋找對(duì)象本身的屬性,如果找不到就找它的原型(父類(lèi)對(duì)象),如果還是找不到就找原型的原型。如果直到最頂層的Object。prototype還是找不到,則返回undefined。

如果對(duì)象自身和它的原型,都定義了一個(gè)同名屬性,那么悠閑讀取對(duì)象自身的屬性,這叫覆蓋(overriding)。

注意:一級(jí)級(jí)向上,在原型鏈尋找某個(gè)屬性,對(duì)性能是有影響的。如果尋找某個(gè)不存在的屬性將會(huì)遍歷整個(gè)原型鏈。

實(shí)際開(kāi)發(fā)上注意事項(xiàng):通常使用第三方框架(一個(gè)類(lèi)),但是我們發(fā)現(xiàn)這個(gè)類(lèi)中并不存在我們想要的屬性或方法時(shí),不能直接修改源代碼,但是可以通過(guò)原型對(duì)象來(lái)添加我們想要的屬性和方法。

1.4 原型操作 1.4.1 constructor屬性

對(duì)象有一個(gè)constructor屬性指向原型對(duì)象所在的構(gòu)造函數(shù):

function Student(name){
    this.name=name;
}
var stu=new Student("aklman");
console.log(stu.constructor);
1.4.2 設(shè)置獲取原型對(duì)象

Object.getPrototypeOf()方法返回一個(gè)對(duì)象的原型對(duì)象,也就是通過(guò)它獲取原型對(duì)象,這是標(biāo)準(zhǔn)的方法。

function Student(name,Class){
    this.name=name;
}
var stu=new Student("aklman");
//獲取stu對(duì)象的原型對(duì)象
var s=Object.getPrototypeOf(stu);
console.log(s);

Object.setPrototypeOd()為現(xiàn)有對(duì)象設(shè)置原型對(duì)象,第一個(gè)參數(shù)是現(xiàn)有對(duì)象,第二個(gè)是要設(shè)置成為原型對(duì)象的對(duì)象,用這個(gè)方法來(lái)設(shè)置原型對(duì)象。

function Student(name,Class){
    this.name=name;
}
var ob={p:"aklan"};
var stu=new Student("Jappar");
//設(shè)置stu的原型對(duì)象ob
Object.setPrototypeOf(stu,ob); 
console.log(stu.p);//aklman
console.log(stu.name);//Jappar
console.log(Object.getPrototypeOf(stu));//由大對(duì)象提供的getPrototypeOf方法獲取對(duì)象的原型對(duì)象

proto屬性:前面用proto來(lái)獲取原型對(duì)象,如果給proto屬性賦值,則設(shè)置原型對(duì)象;最好不用這個(gè),用Object.getPrototypeOf()來(lái)讀取,用Object.setPrototypeof()來(lái)設(shè)置。也就是用這兩個(gè)方法來(lái)對(duì)原型對(duì)象做讀寫(xiě)操作。

1.4.3 獲取原型對(duì)象方法及比較

上面寫(xiě)過(guò)獲取原型對(duì)象的方法有三種:

obj.__proto__
obj.constructor.prototype
Object.getPrototypeOf(obj)

其中前兩個(gè)方法不是很友好,最新的ES6標(biāo)準(zhǔn)規(guī)定,proto屬性只有瀏覽器才需要部署,其他環(huán)境可以不部署。而obj.constructor.prototype在手動(dòng)改變?cè)蛯?duì)象時(shí),會(huì)失效。

function Student(name,Class){
    this.name=name;
}
var ob={p:"aklman"};
var stu=new Student("Jappar");
//使用constructor屬性獲取原型對(duì)象
console.log(stu.constructor.prtototype);

//修改stu的原型對(duì)象為ob
Object.setPrototypeOf(stu,ob);

//使用getPrototypeOf方法來(lái)查看stu的原型對(duì)象為ob
console.log(Object.getPrototypeOf(stu));

//使用constructor屬性獲取原型對(duì)象為Object,這是錯(cuò)誤的,構(gòu)造函數(shù)無(wú)法修改對(duì)象的原型對(duì)象
console.log(stu.constructor.prototype);

總結(jié):最好使用Object.getPrototypeOf()方法獲取原型對(duì)象,沒(méi)了。

function Student(name){
    this.name=name;
}
vat stu=new Student("aklman");
//1.構(gòu)造函數(shù)獲取原型對(duì)象
console.log(stu.constructor.prototype);
//2.由對(duì)象自身獲取原型對(duì)象
console.log(stu.__proto__);
//3.有大樹(shù)提供的getPrototypeOf()方法獲取對(duì)象的原型對(duì)象
console.log(Obj.getPrototypeOf(stu));
第二章 閉包 2.1 閉包的概念

JavaScript有兩種作用域:全局作用域和函數(shù)作用域(局部作用域)。函數(shù)內(nèi)部可以直接讀取全局變量,但是函數(shù)外部無(wú)法讀取函數(shù)內(nèi)部聲明的變量。

但是,有時(shí)候卻需要在函數(shù)外部訪問(wèn)函數(shù)內(nèi)部的變量;正常情況下,這是無(wú)法的訪問(wèn)的,只有通過(guò)變通方法才能實(shí)現(xiàn)訪問(wèn),也就是在函數(shù)內(nèi)部再定義一個(gè)函數(shù),通過(guò)內(nèi)部函數(shù)來(lái)訪問(wèn)函數(shù)內(nèi)部的變量。

function fun1(){
    var n=100;
    var fun2=function(){
        console.log(n);
    }
    return funct;
}
var pack=fun1();
pack();//100

說(shuō)明:函數(shù)fun2就在函數(shù)fun1()內(nèi)部,這是fun1()內(nèi)部的所有局部變量對(duì)fun2()是可訪問(wèn)的。反過(guò)來(lái)就不行,內(nèi)部函數(shù)中的局部變量對(duì)父類(lèi)函數(shù)是不可訪問(wèn)的。這就是JavaScript中特有的鏈?zhǔn)阶饔糜颍╟hain scope)結(jié)構(gòu),子對(duì)象會(huì)一級(jí)一級(jí)地向上尋找所有父類(lèi)對(duì)象的變量,所以,父對(duì)象的所有變量,對(duì)子對(duì)象都是可見(jiàn)的,反之則不成立。

既然fun2()可以讀取fun1()中的局部變量,那么只要把fun2()作為返回值,我們就可以在fun1()外部讀取它的內(nèi)部變量了。

重點(diǎn):

閉包就是函數(shù)fun2,既能狗讀取其他函數(shù)內(nèi)部變量的函數(shù)。由于JavaScript中,只要函數(shù)內(nèi)部的子函數(shù)才能夠讀取函數(shù)內(nèi)部的局部變量,因此可以把閉包簡(jiǎn)單理解成“定義一個(gè)函數(shù)內(nèi)部的函數(shù)”。

閉包的最大特點(diǎn)就是它可以“記住”誕生的環(huán)境,比如fun2()記住,所以從fun2()可以得到fun1()的內(nèi)部變量。本質(zhì)上,閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來(lái)的一座橋梁。

2.2 垃圾回收機(jī)制及閉包 2.2.1 垃圾回收機(jī)制
function fun1(){
    var n=100;
    console.log(++n);
}
fun1();//101
fun1();//101

說(shuō)明:在函數(shù)內(nèi)部引入一個(gè)變量或者函數(shù)時(shí),系統(tǒng)都會(huì)開(kāi)辟一塊內(nèi)存空間;還會(huì)將這塊內(nèi)存的引用計(jì)數(shù)器初始化,初始化值為0;如果外部有全局變量或者程序引用了這塊空間,則引用計(jì)數(shù)器會(huì)自動(dòng)進(jìn)行+1操作,當(dāng)函數(shù)執(zhí)行完畢后,變量計(jì)數(shù)器會(huì)重新歸零,系統(tǒng)會(huì)運(yùn)行垃圾回收機(jī)制,將函數(shù)運(yùn)行產(chǎn)生的數(shù)據(jù)銷(xiāo)毀;如果計(jì)數(shù)器不是0,則不會(huì)清楚數(shù)據(jù);這過(guò)程就是JavaScript的垃圾回收機(jī)制

JavaScript的垃圾回收機(jī)制原理圖:

用閉包的分析話(huà)更能體驗(yàn)此原理:

function fun1(){
    var n=100;
    function fun2(){
        console.log(++n);
    }
    return fun2;
}
var fu=fun1();//實(shí)際上返回了fun2
fu();//101,相當(dāng)于調(diào)用了fun2(),
fu();//102,相當(dāng)于在此調(diào)用了fun2()
fu();//103
fu();//104

代碼分析(注釋?zhuān)?/p>

因函數(shù)fun1被調(diào)用時(shí),返回的結(jié)果是fun2函數(shù)體,也就是說(shuō),fun2函數(shù)被當(dāng)做返回值給fun1的調(diào)用者,但是fun2函數(shù)并沒(méi)有在此被調(diào)用執(zhí)行(只是把函數(shù)體返回到函數(shù)外了);

因此整個(gè)fun1函數(shù)體,無(wú)法判斷子函數(shù)fun2會(huì)對(duì)其產(chǎn)生何種影響,無(wú)法判斷變量n是否會(huì)被使用,即使fun1函數(shù)被調(diào)用結(jié)束,整個(gè)fun1函數(shù)始終保留在內(nèi)存中,不會(huì)被垃圾回收機(jī)制回收;

也就是運(yùn)行代碼發(fā)現(xiàn),函數(shù)調(diào)用一次(在這里是指fun2),其變量n變化一次;

閉包的最大用處:

可以讀取函數(shù)內(nèi)部的變量。

讓函數(shù)內(nèi)部讀取的變量始終保持在內(nèi)存中,即閉包可以使得它誕生環(huán)境一直存在。

注意的是,外層函數(shù)每次運(yùn)行,都會(huì)生成一個(gè)新的閉包,而這個(gè)閉包有會(huì)保留外層函數(shù)的內(nèi)部變量,所以?xún)?nèi)存消耗很大;因此不能濫用閉包,否則會(huì)造成網(wǎng)頁(yè)的性能問(wèn)題。

第三章 call和apply方法

關(guān)于JavaScript中的this的指向:

1.全局作用域下,this指向window對(duì)象

2.構(gòu)造函數(shù)中,this指向?qū)嵗瘜?duì)象

如果要在調(diào)用函數(shù)是直接修改函數(shù)內(nèi)部的this指向使用call或者apply方法來(lái)修改指向。

1.call方法格式:函數(shù)名稱(chēng).call(obj,arg1,arg2,...argN);說(shuō)明其中:obj是函數(shù)內(nèi)this要指向的對(duì)象,arg列表是參數(shù)列表,參數(shù)與參數(shù)之間使用一個(gè)逗號(hào)隔開(kāi)
var ob1={name:"Aklman",age:23};
var ob2={name:"ahmatbek"};
function fun(sex){
    console.log(this.name+this.age+sex);
}
fun.call(ob1,"男");//Aklman23男
fun.call(ob2,"男");//ahmatbekundefined男,因?yàn)閷?duì)象ob2中沒(méi)有age屬性
2.apply方法格式:函數(shù)名稱(chēng).apply(obj,[arg1,,arg2,...argN]);說(shuō)明其中:obj是函數(shù)內(nèi)this要指向的對(duì)象,arg列表是參數(shù)列表,要求格式為數(shù)組
var ob1={name:"aklman",age:23};
var ob2={name:"ahmatbek",tel:176};
function fun(sex,age,tel){
    console.log(this.name+age+sex+tel);
}
fun.apply(ob1, ["男", 23, 176]);//aklman23男176
fun.apply(ob2, ["男", 20, 133]);//ahmatbek20男133

兩種修改this指向方法的區(qū)別:

相同點(diǎn):功能完全一樣,都是為了改變函數(shù)內(nèi)部的hits指向,唯一的不同就在于參數(shù)傳遞方式不同

不同點(diǎn):call方法可能多個(gè)參數(shù),第一個(gè)要指向的對(duì)象,其他參數(shù)為函數(shù)的實(shí)參;apply方法最多只能有兩個(gè)實(shí)參,第一個(gè)要指向的對(duì)象,第二個(gè)是數(shù)組,數(shù)組內(nèi)容為函數(shù)的實(shí)參。

第四章 私有屬性

JavaScript與其他語(yǔ)言不太一樣,它只有兩種屬性,即公有屬性和私有屬性,概念很好理解,也就是在構(gòu)造函數(shù)內(nèi)部通過(guò)this聲明的屬性就是公有屬性,通過(guò)var聲明的就是私有屬性。

function Employee(){
    this.name="aklman";//公有屬性
    var age=18;//私有屬性
    this.fun=function(){//公有方法
        console.log(this.name+age);//age只能在構(gòu)造函數(shù)內(nèi)部訪問(wèn)
    }
}
var m=new Employee();
console.log(m.name);//aklman
console.log(m.age);//undefined
m.fun();//aklman18
第五章 對(duì)象繼承

JavaScript中的繼承的實(shí)現(xiàn)與其他語(yǔ)言也不相同,它沒(méi)有關(guān)鍵字提供繼承的功能。所謂繼承就是為了子類(lèi)中提供父類(lèi)中的屬性和方法,子類(lèi)能夠使用父類(lèi)中的屬性和方法

JavaScript中繼承的實(shí)現(xiàn)方式有:

1.通過(guò)原型對(duì)象實(shí)現(xiàn)繼承
//聲明構(gòu)造函數(shù)
function Study(){
    this.fun=function(){
        console.log("我是構(gòu)造函數(shù)中的公有方法");
    }
}
//聲明構(gòu)造函數(shù)
function Student(){}
Student.prototype=new Study();//設(shè)置構(gòu)造函數(shù)Student的原型為Study,實(shí)現(xiàn)繼承
var extend=new Study();
extend.fun();
2.通過(guò)call或apply方法繼承(實(shí)質(zhì)就是改變指向使用父類(lèi)中的屬性和方法)
//聲明構(gòu)造函數(shù)
function Study(){
    this.fun=function(){
        console.log("我是構(gòu)造函數(shù)中的公有方法");
    }
}
//聲明構(gòu)造函數(shù)
function Student(){
    Study.call(this);//將Study函數(shù)內(nèi)部的this指向Student的實(shí)例化對(duì)象
}
var extend=new Study();
extend.fun();
第六章 定時(shí)器

JavaScript提供定時(shí)執(zhí)行代碼的功能叫做定時(shí)器;

1.setTimeout():用來(lái)指定某個(gè)函數(shù)或某代碼,在多少秒之后執(zhí)行。

2.setInterval():指定某個(gè)任務(wù)每隔一段時(shí)間就執(zhí)行一次,也就是無(wú)限次的定時(shí)執(zhí)行。

setTimeout(),setInterval()的第一個(gè)參數(shù)都是指定執(zhí)行的函數(shù)名稱(chēng)或者代碼段,第二個(gè)參數(shù)是時(shí)間:

function fun(){
    var n=1;
    return function(){
        console.log(++n);
    }
}
var s=fun();
//3秒后調(diào)用函數(shù);
setTimeout("s()",3000);
//每隔1秒就執(zhí)行函數(shù)名為s的函數(shù)
setInterval(s,100);

setTimeout()函數(shù)和setInterval()函數(shù)都返回一個(gè)表示計(jì)數(shù)器編號(hào)的整數(shù)值,將該整數(shù)傳入clearTimeout()和clearInterval()函數(shù),就可以取消對(duì)應(yīng)的定時(shí)器。


補(bǔ)充知識(shí)點(diǎn)

上面提過(guò)內(nèi)存,計(jì)數(shù)器,那么就谷歌一下什么是內(nèi)存及計(jì)數(shù)器。

通常說(shuō)的內(nèi)存是計(jì)算機(jī)的主存儲(chǔ)器(main memory),簡(jiǎn)稱(chēng)主存。主存通過(guò)控制芯片等與CPU相連,主要負(fù)責(zé)存儲(chǔ)指令和數(shù)據(jù)。主存由可讀寫(xiě)的元素構(gòu)成,每個(gè)字節(jié)(1字節(jié)=8位)都帶有一個(gè)地址編號(hào)(也就是所謂的內(nèi)存地址)。CPU可以通過(guò)改地址讀取主存中的指令和數(shù)據(jù),當(dāng)然也可以寫(xiě)入數(shù)據(jù)。注意的是,主存中存儲(chǔ)的指令和數(shù)據(jù)會(huì)隨著計(jì)算機(jī)的關(guān)機(jī)自動(dòng)清除(自動(dòng)銷(xiāo)毀,釋放)。

寄存器是CPU的組件之一,,CPU由控制器,運(yùn)算器,時(shí)鐘,寄存器組成。控制器做的是數(shù)據(jù)運(yùn)算以外的處理(主要是輸入和輸出的時(shí)機(jī)控制),比如內(nèi)存和磁盤(pán)等媒介的輸入輸出,顯示器,打印機(jī)的輸出等,都是控制器做的事。

廢話(huà)不多說(shuō),聽(tīng)大師們說(shuō)CPU中程序員只要搞明白寄存器就可以飛上天了。原因是程序是把寄存器作為對(duì)象來(lái)描述,也就是計(jì)算機(jī)中每一句命令都是通過(guò)寄存器才能執(zhí)行(數(shù)據(jù)存儲(chǔ),假發(fā)運(yùn)算等),寄存器也有很多種類(lèi),根據(jù)類(lèi)型存儲(chǔ)的數(shù)據(jù)也不一樣,不同的CPU中的寄存器數(shù)量也不一樣以及寄存器存儲(chǔ)的數(shù)值范圍也不一樣。

寄存器由程序計(jì)數(shù)器,標(biāo)志寄存器,累加寄存器,基址寄存器,變址寄存器,通用寄存器等組成,其中程序計(jì)數(shù)器和標(biāo)志寄存器比較特殊。計(jì)數(shù)器以二進(jìn)制形式技術(shù),計(jì)數(shù)規(guī)則是:CPU每執(zhí)行一個(gè)命令,計(jì)數(shù)器的值就會(huì)自動(dòng)加1,例如,CPU執(zhí)行0100地址的指令后,計(jì)數(shù)器的值就變成了0101(當(dāng)執(zhí)行的指令占據(jù)多個(gè)內(nèi)存地址是,增加與指令長(zhǎng)度相應(yīng)的數(shù)值)。然后CPU的控制器就會(huì)參照計(jì)數(shù)器的數(shù)值,從內(nèi)存中讀取命令并執(zhí)行,也就是說(shuō),程序計(jì)數(shù)器決定著程序的運(yùn)行流程。

參考資料

W3school
菜鳥(niǎo)教程
JavaScript權(quán)威指南(第6版)
計(jì)算機(jī)科學(xué)導(dǎo)論(第三版)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/52024.html

相關(guān)文章

  • JS筆記

    摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。異步編程入門(mén)的全稱(chēng)是前端經(jīng)典面試題從輸入到頁(yè)面加載發(fā)生了什么這是一篇開(kāi)發(fā)的科普類(lèi)文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門(mén)教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...

    rottengeek 評(píng)論0 收藏0
  • JavaScript難點(diǎn)筆記

    摘要:是班的學(xué)生構(gòu)造函數(shù)的就是由這個(gè)構(gòu)造函數(shù)得到的對(duì)象的原型對(duì)象父類(lèi)對(duì)象構(gòu)造函數(shù)的對(duì)象就是實(shí)例化對(duì)象和的原型對(duì)象。由于的所有對(duì)象都是構(gòu)造函數(shù)只有除外。 前言 由于工作需求重新回顧了一下JavaScript,以下內(nèi)容是我以前的學(xué)習(xí)筆記和其他參考資料整理完善后的內(nèi)容,都是常用到的,使用頻率比較高的,自己必須得精通的知識(shí)點(diǎn)的總結(jié),便以后再?gòu)?fù)習(xí)參考。 第一章 JavaScript原型對(duì)象與原型鏈 1...

    APICloud 評(píng)論0 收藏0
  • JavaScript難點(diǎn)筆記

    摘要:是班的學(xué)生構(gòu)造函數(shù)的就是由這個(gè)構(gòu)造函數(shù)得到的對(duì)象的原型對(duì)象父類(lèi)對(duì)象構(gòu)造函數(shù)的對(duì)象就是實(shí)例化對(duì)象和的原型對(duì)象。由于的所有對(duì)象都是構(gòu)造函數(shù)只有除外。 前言 由于工作需求重新回顧了一下JavaScript,以下內(nèi)容是我以前的學(xué)習(xí)筆記和其他參考資料整理完善后的內(nèi)容,都是常用到的,使用頻率比較高的,自己必須得精通的知識(shí)點(diǎn)的總結(jié),便以后再?gòu)?fù)習(xí)參考。 第一章 JavaScript原型對(duì)象與原型鏈 1...

    Alfred 評(píng)論0 收藏0
  • 【進(jìn)階1-1期】理解JavaScript 中的執(zhí)行上下文和執(zhí)行棧

    摘要:首次運(yùn)行代碼時(shí),會(huì)創(chuàng)建一個(gè)全局執(zhí)行上下文并到當(dāng)前的執(zhí)行棧中。執(zhí)行上下文的創(chuàng)建執(zhí)行上下文分兩個(gè)階段創(chuàng)建創(chuàng)建階段執(zhí)行階段創(chuàng)建階段確定的值,也被稱(chēng)為。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開(kāi)始前端進(jìn)階的第一期,本周的主題是調(diào)用堆棧,,今天是第一天 本計(jì)劃一共28期,每期重點(diǎn)攻克一個(gè)面試重難點(diǎn),如果你還不了解本進(jìn)...

    import. 評(píng)論0 收藏0
  • 【進(jìn)階1-3期】JavaScript深入之內(nèi)存空間詳細(xì)圖解

    摘要:進(jìn)階期理解中的執(zhí)行上下文和執(zhí)行棧進(jìn)階期深入之執(zhí)行上下文棧和變量對(duì)象但是今天補(bǔ)充一個(gè)知識(shí)點(diǎn)某些情況下,調(diào)用堆棧中函數(shù)調(diào)用的數(shù)量超出了調(diào)用堆棧的實(shí)際大小,瀏覽器會(huì)拋出一個(gè)錯(cuò)誤終止運(yùn)行。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開(kāi)始前端進(jìn)階的第一期,本周的主題是調(diào)用堆棧,今天是第3天。 本計(jì)劃一共28期,每期重點(diǎn)攻...

    coordinate35 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<