20200828_陈宇_
日志
学习总结:
今天学习了函数中的重载、参数按值传递、作用域和作用链域、闭包、对象、数组。
一、重载(overload):
1、什么是重载: 相同函数名,不同参数列表的多个函数,在调用时,根据传入参数的不同,自动选择匹配的函数执行 。
2、为什么使用重载: 减少API的数量,减轻调用者的负担 。
3、什么时候使用重载: 只要一项任务,需要根据不同的参数,执行不同的操作时,就需要使用重载 。
4、重载问题: JS语法不支持重载,JS中不允许多个同名函数同时存在 。
5、解决重载问题: 每一个函数内,都有一个arguments对象接住所有传入函数的参数值,根据arguments的元素内容或元素个数,判断执行不同的操作 。
6、arguments: 函数调用时,自动创建的,自动接收所有传入函数的参数值。arguments其实是一个类数组对象 。
二、参数按值传递:
1、原始类型按值传递:
var a=1;
var b=a;
b=2;
console.log(a,b) //1 2
2、引用类型的传递:
var obj1={
name:"hh",
sex:"女",
}
var obj2=obj1;
obj2.name="aaaa";
console.log(obj1.name)//aaaa
三、作用域和作用链域:
1、作用域: 变量的可作用范围,其实是一个对象 。
全局作用域对象: 全局作用域对象(window),保存全局变量 。优点:可反复使用;缺点:缺点:随处可用,容易造成全局污染,我们建议尽量少用全局变量。
函数作用域对象: 函数作用域对象(AO),保存局部变量 。
包含:参数变量、函数内var声明的变量。
优点:仅函数内可用,不会被污染。缺点:不可重用。
案例:
var name="one";
function test(){
var name="two";
function test1(){
var name ="three";
console.log(name);//three
}
function test2(){
console.log(name);//two
}
test1();
test2();
}
test();
2、函数的生命周期:
开始执行程序前;定义函数时;调用函数时;调用后。
四、闭包:
1、什么是闭包: 即重用变量,又保护变量不被污染的机制 。
2、为什么使用闭包:全局变量:优点:可重用;
局部变量:优点:不会被污染;
3、使用闭包:
var p=(function(){
var q;
return function () {
return q="哈哈哈技术大咖";}
})()
a=p()
console.log(a)//哈哈哈技术大咖
4、闭包如何形成:
外层函数调用后,外层函数的作用域对象(AO),无法释放,被内层函数对象的scope引用着 。
缺点:1. 比普通函数占用更多内存,多的是外层函数的作用域对象(AO)始终存在。
- 容易造成内存泄漏。
5、解决如何释放闭包:show[0]=null
6、理解闭包的流程:
- 找受保护的的变量,确定外层函数调用后,受保护变量的最终值。
- 找操作受保护的变量的内层函数对象。
注意:同一次外层函数调用,返回的内层函数对象,共用同一个受保护的变量。
五、对象:
1、什么是对象:
对象是一组属性(property)和方法(method)的集合,对象属于引用类型数据 。
2、JS对象分类:
A、内置对象:
什么是内置对象: ES标准中规定的,浏览器厂商已经实现的对象,即JS官方提供的对象 。
API:Math、Date、Number、Boolean、Error、Function
B、宿主对象: 由ECMAScript实现的宿主环境提供的对象,可以理解为 “ 浏览器提供的对象 ”。所有的BOM和DOM都是宿主对象 。
C、自定义对象: 自定义对象就是自己创建的对象(对象字面量/内置构造函数/自定义构造函数) 。
D、访问对象中的属性
E、遍历对象中的属性
F、判断对象中是否含有某个属性
G、全局函数
六、数组:
1、什么是数组:
数组是由多个元素组成的集合,每个元素就是一个数据,而数组元素是保存在数组中的一个数据 。
数组是引用类型,按值传递。
2、创建数组:
A、创建空数组:
数组直接量:var arr=[];
使用内置构造函数:var arr=new Array();
B、创建数组同时初始化数组元素:
数组直接量:var arr=[值1,值2,....];
使用内置构造函数:var arr=new Array(值1,值2,....);
C、创建含有n个空元素的数组:
var arr =new Array(n)
例:var arr= new Array(3);
arr[0]='"name";
arr[1]="sex";
arr[2]="age";
3、数组元素的访问:数组[下标]
学习心得:
今天学的东西很多,大部分知识在上课的时候都听懂了,但是在写练习的时候不看老师写的又不会写,先模仿老师的代码,然后加强记忆,相信不久就能熟练运用,加油。
近期评论