回顧總結(jié)第一課重點內(nèi)容:
指令式編程與函數(shù)式編程的差異,指令式編程需要我們有計算機一樣的頭腦,我們大腦要像CPU一樣,我們要像計算機一樣思考,這樣我們能寫出指令式編程的程序來。而函數(shù)式編程是希望計算機像人一樣思考,這樣的話我們就可以很平滑的和計算機對話了。因為這兩種類型語言的思維差異的跨度非常大,因此如果以后在指令式編程和函數(shù)式編程之間進行切換的話,需要具備相應(yīng)的思維方式。
一.訓(xùn)練指令式編程
本課重點:怎么樣把一個人訓(xùn)練得像計算機一樣思考,能夠用計算機的邏輯思維去設(shè)計我們的軟件。
1.編程語言的交互模式是指令式編程的根本,最基礎(chǔ)的指令是CPU的指令,CPU的指令現(xiàn)在都是定長指令。計算機程序指令不等于CPU指令。因為CPU的這種定長指令分的太細了不適合程序員直接操作,但是編程語句是可以的。在交互模式下任何一條獨立的語句都會立刻被執(zhí)行。
2.了解指令式編程的語句結(jié)構(gòu)特點:順序、分支、循環(huán)、函數(shù)。
順序:從上到下依次執(zhí)行。
分支:會按條件改變執(zhí)行路徑,滿足條件就進入執(zhí)行括號里的代碼段,不滿足條件就會繞過括號中的代碼段。
循環(huán):最早的循環(huán)語句是
if+goto完成的,給一個條件滿足就會跳到之前指定的代碼位置進行執(zhí)行,不管中間有多少代碼只要條件成立就會跳到指定點執(zhí)行,如果條件一直滿足就會一直循環(huán)執(zhí)行下去不會跳出去,這就是CPU的思維方式。循環(huán)結(jié)構(gòu)如果要跳出分為兩種情況:第一種是讓條件從滿足條件開始起直到變得不滿足條件,第二種就是在循環(huán)外再指定一個跳轉(zhuǎn)點,在循環(huán)內(nèi)部再設(shè)立個條件如果成立跳到此循環(huán)外的設(shè)置的跳轉(zhuǎn)點。從這兩種循環(huán)的執(zhí)行方式衍變到現(xiàn)在的while語句循環(huán)、for語句循環(huán)等循環(huán)結(jié)構(gòu)。函數(shù):函數(shù)是指令式編程的另一個特點,也會根據(jù)條件改變程序執(zhí)行路徑。程序執(zhí)行時遇到定義聲明的函數(shù)時會直接跳過這個代碼段,在之后的位置如果遇到調(diào)用函數(shù),就會跳到這個函數(shù)定義聲明的位置然后執(zhí)行其中的代碼段,如果在執(zhí)行函數(shù)內(nèi)部遇到
return就代表要返回,返回到函數(shù)的調(diào)用處,返回過程還會將return后面跟的值也帶到函數(shù)調(diào)用處。運用以上這些指令式編程的特點進行練習(xí)設(shè)計出我們想要的程序。
二.JS中一些需要重點注意的知識點
1.局部變量和全局變量
局部變量:在函數(shù)內(nèi)部定義,并且僅在函數(shù)中有效的變量就是局部變量(形參也是)
全局變量:在頁面中聲明的變量就是全局變量.
2.內(nèi)部函數(shù)
1.內(nèi)部函數(shù)不可以在函數(shù)外部調(diào)用(局部變量)
2.調(diào)用過外部函數(shù)之后,內(nèi)部函數(shù)依然不可以在函數(shù)外部調(diào)用(局部變量)
3.內(nèi)部函數(shù)可以在函數(shù)內(nèi)部調(diào)用,聲明函數(shù)不區(qū)分先后順序,匿名函數(shù)必須在定義之后
3.變量的作用域鏈條
就是在函數(shù)外部定義的變量有效范圍會想鏈條一樣逐漸向內(nèi)部函數(shù)傳遞,這就是函數(shù)的變量作用域鏈
4.匿名函數(shù)的特征
格式:var 變量名 = function(){
函數(shù)體
[return語句]
};
- 關(guān)于函數(shù)體和函數(shù)的參數(shù)部分和聲明函數(shù)沒有任何區(qū)別.
- 調(diào)用匿名函數(shù)必須在匿名函數(shù)賦值之后才可以調(diào)用,而聲明函數(shù)由于預(yù)先加載,調(diào)用不分先后
- 匿名函數(shù)調(diào)用 使用 變量名()的方式,聲明函數(shù)采用 函數(shù)名() 的方式
5.閉包
特征:將函數(shù)內(nèi)部的函數(shù)返回到函數(shù)外部,以便于可以在函數(shù)外部通過返回的內(nèi)部函數(shù)訪問所有局部變量.

bibao.jpg
實現(xiàn)方式:
一. 通過全局變量實現(xiàn)
<script>
//G區(qū)域
//閉包方法1 聲明全局變量N
var N;
//頁面級別的函數(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 = '頁面級別的全局變量';
//調(diào)用函數(shù)F()
F();
//在函數(shù)外部訪問局部變量
var result=N();
console.log(result);
</script>
二.通過返回值實現(xiàn)
<script>
//G區(qū)域
//頁面級別的函數(shù)
function F(){
//局部變量
var b='局部變量b';
//內(nèi)部函數(shù)
//為F函數(shù)返回一個結(jié)果
return function(){
//console.log(b);
//return局部變量
return b;
}
}
//a變量
var a = '頁面級別的全局變量';
//調(diào)用函數(shù)F()
var N= F();
//調(diào)用N
var result=N();
console.log(result);
</script>
注意:不要隨便使用閉包結(jié)構(gòu).閉包產(chǎn)生全局變量,不會被系統(tǒng)回收.
6.自執(zhí)行函數(shù)
自執(zhí)行函數(shù):無需調(diào)用就可以執(zhí)行的函數(shù)就是自執(zhí)行函數(shù).
格式:
(function(形參,形參..){
函數(shù)體中的代碼.
})(參數(shù),參數(shù)...)
作用:自執(zhí)行函數(shù)的作用就是可以為頁面劃分多個區(qū)域,由于區(qū)域都是在函數(shù)中,收到局部變量限制,所以每個自執(zhí)行函數(shù)可以認為是一個單獨的頁面.變量之間互不沖突.(自執(zhí)行函數(shù)只可以執(zhí)行一次)