在本周内,我继续学习了JavaScript高级程序设计,收获颇多,以下为我对我所学内容的整理。
闭包
1.什么是闭包?
理解一:闭包是嵌套的内部函数
理解二:包含被引用变量(函数)的对象
2.产生闭包的条件:
嵌套函数,内部函数引用外部函数的变量
<script> function fun(){ var a = 2; function fn(){ console.log(a); } fn() } fun() //将函数作为另一个函数的返回值 function fn1(){ var a = 2; function fn2(){ a++; console.log(a); } fn2(); } var f = fn1(); f(); // 3 f(); //4 </script>
3.闭包的作用:
使用函数内部的变量在函数执行完后,依然存在在内存中(延长了局部变量的生命周期)
让函数外部可以操作(读写)到函数内部的数据(变量/函数)
对象的创建模式
1.Object构造函数模式
var p = new Object(); p.name = "Tom"; p.age = 18; p.setName = function(name){ this.name = name; } p.setName("李白"); console.log(p.name,p.age);//李白 18
2.对象字面量模式
var p = { name:"Tom", age:12, setName:function(name){ this.name = name; } } console.log(p.name,p.age);//Tom 12 p.setName("李白"); console.log(p.name,p.age);//李白 12
3.工厂模式
function creatPerson(age,name){ var obj = { age:age, name:name, setName: function(){ this.name = name; } } return obj; } var p1 = creatPerson(16,"张三"); var p2 = creatPerson(16,"李四");
4.自定义构造函数类型
function Person(name,age){ this.name = name; this.age = age; this.setName = function(otherName){ this.name = otherName; } } var p1 = new Person("lisa",16); p1.setName("bob"); console.log(p1.name); // bob console.log(p1 instanceof Person); //true
5.构造函数+原型组合模式
function Person(name,age){ this.name = name; this.age = age; } Person.prototype.setName = function(name){ this.name = name; } var p1 = new Person("Tom",16); var p2 = new Person("bob",19); p1.setName("Jone");
继承模式
1.原型链继承
//父类型 function Supper(){ this.supprop = "Supper property"; } Supper.prototype.showSupperProp = funtion(){ console.log(this.supprop); } //子类型 function Sub(){ this.subProp = "sub propery"; } Sub.prototype = new Supper(); Sub.pprototype.constructor = Sub; Sub.prototype.showSubProp = function(){ console.log(this.subProp); } var sub = new Sub(); sub.showSubProp(); sub.showSupperProp();
2.借用构造函数继承
function Person(name,age){ this.name = name; this.age = age; } function Student(name,age,price){ Person.call(this,name,age);//相当于this.Person(name,age); this.price = price; } var s = new Student("Tom",20,14000); console.log(s.name,s.age,s.price);
3.原型链+借用构造函数的组合继承
function Person(name,age){ this.name = name; this.age = age; } Person.prototype.setName = function(name){ this.name = name; } function Student(name,age,price){ Person.call(this,name,age); this.price = price; } Student.prototype = new Person(); Student.prototype.constructor = Student; Student.prototype.setPrice = function(price){ this.price = price; } var s = new Student("tom",24,15000); s.setName("bob"); s.setPrice(16000); console.log(s); console.log(s.name,s.age,s.price);
进程与线程
进程:程序的一次运行,它占有一片独有的内存空间,可以通过Windows任务管理器查看进程
多进程运行:应用程序可以同时启动多个实例运行
线程:是进程内的一个独立执行单元,是程序执行的一个完整流程
多线程:在一个进程内,同时有多个线程运行
浏览器内核
执行流程
js执行代码的基本流程
先执行初始化代码
定时器,绑定事件监听,发送Ajax请求
最后在某个时刻才会执行回调代码
Web Workers(多线程)
1.H5提供了规范的js分线程实现,为Web Workers
2.相关API
Worker:构造函数,加载分线程执行的js文件
Worker.prototype.onmessage: 用于接收另一个线程的回调函数
Worker.prototype.postMessage: 向另一个线程发送消息
本周的学习内容大致如此,明天将要考核,希望能顺利通过,gogogo。