回顾总结第一课重点内容:
指令式编程与函数式编程的差异,指令式编程需要我们有计算机一样的头脑,我们大脑要像CPU一样,我们要像计算机一样思考,这样我们能写出指令式编程的程序来。而函数式编程是希望计算机像人一样思考,这样的话我们就可以很平滑的和计算机对话了。因为这两种类型语言的思维差异的跨度非常大,因此如果以后在指令式编程和函数式编程之间进行切换的话,需要具备相应的思维方式。
一.训练指令式编程
本课重点:怎么样把一个人训练得像计算机一样思考,能够用计算机的逻辑思维去设计我们的软件。
1.编程语言的交互模式是指令式编程的根本,最基础的指令是CPU的指令,CPU的指令现在都是定长指令。计算机程序指令不等于CPU指令。因为CPU的这种定长指令分的太细了不适合程序员直接操作,但是编程语句是可以的。在交互模式下任何一条独立的语句都会立刻被执行。
2.了解指令式编程的语句结构特点:顺序、分支、循环、函数。
顺序:从上到下依次执行。
分支:会按条件改变执行路径,满足条件就进入执行括号里的代码段,不满足条件就会绕过括号中的代码段。
循环:最早的循环语句是
if+goto
完成的,给一个条件满足就会跳到之前指定的代码位置进行执行,不管中间有多少代码只要条件成立就会跳到指定点执行,如果条件一直满足就会一直循环执行下去不会跳出去,这就是CPU的思维方式。循环结构如果要跳出分为两种情况:第一种是让条件从满足条件开始起直到变得不满足条件,第二种就是在循环外再指定一个跳转点,在循环内部再设立个条件如果成立跳到此循环外的设置的跳转点。从这两种循环的执行方式衍变到现在的while语句循环、for语句循环
等循环结构。函数:函数是指令式编程的另一个特点,也会根据条件改变程序执行路径。程序执行时遇到定义声明的函数时会直接跳过这个代码段,在之后的位置如果遇到调用函数,就会跳到这个函数定义声明的位置然后执行其中的代码段,如果在执行函数内部遇到
return
就代表要返回,返回到函数的调用处,返回过程还会将return
后面跟的值也带到函数调用处。运用以上这些指令式编程的特点进行练习设计出我们想要的程序。
二.JS中一些需要重点注意的知识点
1.局部变量和全局变量
局部变量:在函数内部定义,并且仅在函数中有效的变量就是局部变量(形参也是)
全局变量:在页面中声明的变量就是全局变量.
2.内部函数
1.内部函数不可以在函数外部调用(局部变量)
2.调用过外部函数之后,内部函数依然不可以在函数外部调用(局部变量)
3.内部函数可以在函数内部调用,声明函数不区分先后顺序,匿名函数必须在定义之后
3.变量的作用域链条
就是在函数外部定义的变量有效范围会想链条一样逐渐向内部函数传递,这就是函数的变量作用域链
4.匿名函数的特征
格式:var 变量名 = function(){
函数体
[return语句]
};
- 关于函数体和函数的参数部分和声明函数没有任何区别.
- 调用匿名函数必须在匿名函数赋值之后才可以调用,而声明函数由于预先加载,调用不分先后
- 匿名函数调用 使用 变量名()的方式,声明函数采用 函数名() 的方式
5.闭包
特征:将函数内部的函数返回到函数外部,以便于可以在函数外部通过返回的内部函数访问所有局部变量.
实现方式:
一. 通过全局变量实现
<script>
//G区域
//闭包方法1 声明全局变量N
var N;
//页面级别的函数
function F(){
//局部变量
var b='局部变量b';
//内部函数
var c = function(){
//console.log(b);
//return局部变量
return b;
}
//将c函数赋值为N全局变量
N=c;
}
//a变量
var a = '页面级别的全局变量';
//调用函数F()
F();
//在函数外部访问局部变量
var result=N();
console.log(result);
</script>
二.通过返回值实现
<script>
//G区域
//页面级别的函数
function F(){
//局部变量
var b='局部变量b';
//内部函数
//为F函数返回一个结果
return function(){
//console.log(b);
//return局部变量
return b;
}
}
//a变量
var a = '页面级别的全局变量';
//调用函数F()
var N= F();
//调用N
var result=N();
console.log(result);
</script>
注意:不要随便使用闭包结构.闭包产生全局变量,不会被系统回收.
6.自执行函数
自执行函数:无需调用就可以执行的函数就是自执行函数.
格式:
(function(形参,形参..){
函数体中的代码.
})(参数,参数...)
作用:自执行函数的作用就是可以为页面划分多个区域,由于区域都是在函数中,收到局部变量限制,所以每个自执行函数可以认为是一个单独的页面.变量之间互不冲突.(自执行函数只可以执行一次)