回顧總結(jié)第一課重點(diǎn)內(nèi)容:
指令式編程與函數(shù)式編程的差異,指令式編程需要我們有計(jì)算機(jī)一樣的頭腦荆永,我們大腦要像CPU一樣,我們要像計(jì)算機(jī)一樣思考国章,這樣我們能寫出指令式編程的程序來(lái)具钥。而函數(shù)式編程是希望計(jì)算機(jī)像人一樣思考,這樣的話我們就可以很平滑的和計(jì)算機(jī)對(duì)話了液兽。因?yàn)檫@兩種類型語(yǔ)言的思維差異的跨度非常大骂删,因此如果以后在指令式編程和函數(shù)式編程之間進(jìn)行切換的話,需要具備相應(yīng)的思維方式四啰。
一.訓(xùn)練指令式編程
本課重點(diǎn):怎么樣把一個(gè)人訓(xùn)練得像計(jì)算機(jī)一樣思考宁玫,能夠用計(jì)算機(jī)的邏輯思維去設(shè)計(jì)我們的軟件。
1.編程語(yǔ)言的交互模式是指令式編程的根本柑晒,最基礎(chǔ)的指令是CPU的指令欧瘪,CPU的指令現(xiàn)在都是定長(zhǎng)指令。計(jì)算機(jī)程序指令不等于CPU指令匙赞。因?yàn)镃PU的這種定長(zhǎng)指令分的太細(xì)了不適合程序員直接操作恋追,但是編程語(yǔ)句是可以的。在交互模式下任何一條獨(dú)立的語(yǔ)句都會(huì)立刻被執(zhí)行罚屋。
2.了解指令式編程的語(yǔ)句結(jié)構(gòu)特點(diǎn):順序苦囱、分支、循環(huán)脾猛、函數(shù)撕彤。
順序:從上到下依次執(zhí)行。
分支:會(huì)按條件改變執(zhí)行路徑猛拴,滿足條件就進(jìn)入執(zhí)行括號(hào)里的代碼段羹铅,不滿足條件就會(huì)繞過(guò)括號(hào)中的代碼段。
循環(huán):最早的循環(huán)語(yǔ)句是
if+goto
完成的,給一個(gè)條件滿足就會(huì)跳到之前指定的代碼位置進(jìn)行執(zhí)行愉昆,不管中間有多少代碼只要條件成立就會(huì)跳到指定點(diǎn)執(zhí)行职员,如果條件一直滿足就會(huì)一直循環(huán)執(zhí)行下去不會(huì)跳出去,這就是CPU的思維方式跛溉。循環(huán)結(jié)構(gòu)如果要跳出分為兩種情況:第一種是讓條件從滿足條件開(kāi)始起直到變得不滿足條件焊切,第二種就是在循環(huán)外再指定一個(gè)跳轉(zhuǎn)點(diǎn)扮授,在循環(huán)內(nèi)部再設(shè)立個(gè)條件如果成立跳到此循環(huán)外的設(shè)置的跳轉(zhuǎn)點(diǎn)。從這兩種循環(huán)的執(zhí)行方式衍變到現(xiàn)在的while語(yǔ)句循環(huán)专肪、for語(yǔ)句循環(huán)
等循環(huán)結(jié)構(gòu)刹勃。函數(shù):函數(shù)是指令式編程的另一個(gè)特點(diǎn),也會(huì)根據(jù)條件改變程序執(zhí)行路徑嚎尤。程序執(zhí)行時(shí)遇到定義聲明的函數(shù)時(shí)會(huì)直接跳過(guò)這個(gè)代碼段荔仁,在之后的位置如果遇到調(diào)用函數(shù),就會(huì)跳到這個(gè)函數(shù)定義聲明的位置然后執(zhí)行其中的代碼段芽死,如果在執(zhí)行函數(shù)內(nèi)部遇到
return
就代表要返回乏梁,返回到函數(shù)的調(diào)用處,返回過(guò)程還會(huì)將return
后面跟的值也帶到函數(shù)調(diào)用處关贵。運(yùn)用以上這些指令式編程的特點(diǎn)進(jìn)行練習(xí)設(shè)計(jì)出我們想要的程序掌呜。
二.JS中一些需要重點(diǎn)注意的知識(shí)點(diǎn)
1.局部變量和全局變量
局部變量:在函數(shù)內(nèi)部定義,并且僅在函數(shù)中有效的變量就是局部變量(形參也是)
全局變量:在頁(yè)面中聲明的變量就是全局變量.
2.內(nèi)部函數(shù)
1.內(nèi)部函數(shù)不可以在函數(shù)外部調(diào)用(局部變量)
2.調(diào)用過(guò)外部函數(shù)之后,內(nèi)部函數(shù)依然不可以在函數(shù)外部調(diào)用(局部變量)
3.內(nèi)部函數(shù)可以在函數(shù)內(nèi)部調(diào)用,聲明函數(shù)不區(qū)分先后順序,匿名函數(shù)必須在定義之后
3.變量的作用域鏈條
就是在函數(shù)外部定義的變量有效范圍會(huì)想鏈條一樣逐漸向內(nèi)部函數(shù)傳遞,這就是函數(shù)的變量作用域鏈
4.匿名函數(shù)的特征
格式:var 變量名 = function(){
函數(shù)體
[return語(yǔ)句]
};
- 關(guān)于函數(shù)體和函數(shù)的參數(shù)部分和聲明函數(shù)沒(méi)有任何區(qū)別.
- 調(diào)用匿名函數(shù)必須在匿名函數(shù)賦值之后才可以調(diào)用,而聲明函數(shù)由于預(yù)先加載,調(diào)用不分先后
- 匿名函數(shù)調(diào)用 使用 變量名()的方式,聲明函數(shù)采用 函數(shù)名() 的方式
5.閉包
特征:將函數(shù)內(nèi)部的函數(shù)返回到函數(shù)外部,以便于可以在函數(shù)外部通過(guò)返回的內(nèi)部函數(shù)訪問(wèn)所有局部變量.
實(shí)現(xiàn)方式:
一. 通過(guò)全局變量實(shí)現(xiàn)
<script>
//G區(qū)域
//閉包方法1 聲明全局變量N
var N;
//頁(yè)面級(jí)別的函數(shù)
function F(){
//局部變量
var b='局部變量b';
//內(nèi)部函數(shù)
var c = function(){
//console.log(b);
//return局部變量
return b;
}
//將c函數(shù)賦值為N全局變量
N=c;
}
//a變量
var a = '頁(yè)面級(jí)別的全局變量';
//調(diào)用函數(shù)F()
F();
//在函數(shù)外部訪問(wèn)局部變量
var result=N();
console.log(result);
</script>
二.通過(guò)返回值實(shí)現(xiàn)
<script>
//G區(qū)域
//頁(yè)面級(jí)別的函數(shù)
function F(){
//局部變量
var b='局部變量b';
//內(nèi)部函數(shù)
//為F函數(shù)返回一個(gè)結(jié)果
return function(){
//console.log(b);
//return局部變量
return b;
}
}
//a變量
var a = '頁(yè)面級(jí)別的全局變量';
//調(diào)用函數(shù)F()
var N= F();
//調(diào)用N
var result=N();
console.log(result);
</script>
注意:不要隨便使用閉包結(jié)構(gòu).閉包產(chǎn)生全局變量,不會(huì)被系統(tǒng)回收.
6.自執(zhí)行函數(shù)
自執(zhí)行函數(shù):無(wú)需調(diào)用就可以執(zhí)行的函數(shù)就是自執(zhí)行函數(shù).
格式:
(function(形參,形參..){
函數(shù)體中的代碼.
})(參數(shù),參數(shù)...)
作用:自執(zhí)行函數(shù)的作用就是可以為頁(yè)面劃分多個(gè)區(qū)域,由于區(qū)域都是在函數(shù)中,收到局部變量限制,所以每個(gè)自執(zhí)行函數(shù)可以認(rèn)為是一個(gè)單獨(dú)的頁(yè)面.變量之間互不沖突.(自執(zhí)行函數(shù)只可以執(zhí)行一次)