JavaScript高级(二)

简介: JavaScript高级

在本周内,我继续学习了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任务管理器查看进程

多进程运行:应用程序可以同时启动多个实例运行

线程:是进程内的一个独立执行单元,是程序执行的一个完整流程

多线程:在一个进程内,同时有多个线程运行

浏览器内核

113d211c1a874ed4aaf37f5eac68276a.png

执行流程

js执行代码的基本流程

先执行初始化代码

定时器,绑定事件监听,发送Ajax请求

最后在某个时刻才会执行回调代码

Web Workers(多线程)

1.H5提供了规范的js分线程实现,为Web Workers

2.相关API

Worker:构造函数,加载分线程执行的js文件

Worker.prototype.onmessage: 用于接收另一个线程的回调函数

Worker.prototype.postMessage: 向另一个线程发送消息

本周的学习内容大致如此,明天将要考核,希望能顺利通过,gogogo。


目录
相关文章
|
6月前
|
前端开发 JavaScript 开发者
深入理解JavaScript:从基础到高级应用
深入理解JavaScript:从基础到高级应用
105 0
|
6月前
|
JavaScript 前端开发 Java
掌握 JavaScript:从初学者到高级开发者的完整指南(一)
掌握 JavaScript:从初学者到高级开发者的完整指南(一)
|
6月前
|
JSON JavaScript 前端开发
掌握 JavaScript:从初学者到高级开发者的完整指南之JavaScript对象(二)
掌握 JavaScript:从初学者到高级开发者的完整指南之JavaScript对象(二)
|
6月前
|
JavaScript 前端开发 索引
JavaScript字符串检查:从基础到高级
【2月更文挑战第26天】
63 0
JavaScript字符串检查:从基础到高级
|
5月前
|
前端开发 JavaScript 安全
高级前端开发需要知道的 25 个 JavaScript 单行代码
1. 不使用临时变量来交换变量的值 2. 对象解构,让数据访问更便捷 3. 浅克隆对象 4. 合并对象 5. 清理数组 6. 将 NodeList 转换为数组 7. 检查数组是否满足指定条件 8. 将文本复制到剪贴板 9. 删除数组重复项 10. 取两个数组的交集 11. 求数组元素的总和 12. 根据指定条件判断,是否给对象的属性赋值 13. 使用变量作为对象的键 14. 离线状态检查器 15. 离开页面弹出确认对话框 16. 对象数组,根据对象的某个key求对应值的总和 17. 将 url 问号后面的查询字符串转为对象 18. 将秒数转换为时间格式的字符串 19.
58 3
高级前端开发需要知道的 25 个 JavaScript 单行代码
|
6月前
|
JavaScript 前端开发
web前端JS高阶面试题(1),高级开发工程师面试
web前端JS高阶面试题(1),高级开发工程师面试
|
6月前
|
JavaScript 前端开发
JavaScript高级主题:什么是 ES6 的解构赋值?
【4月更文挑战第13天】ES6的解构赋值语法简化了从数组和对象中提取值的过程,提高代码可读性。例如,可以从数组`[1, 2, 3]`中分别赋值给`a`, `b`, `c`,或者从对象`{x: 1, y: 2, z: 3}`中提取属性值给同名变量。
34 6
|
6月前
|
前端开发 JavaScript
JavaScript新科技:PostCSS的安装和使用,2024年最新2024网易Web前端高级面试题总结
JavaScript新科技:PostCSS的安装和使用,2024年最新2024网易Web前端高级面试题总结
|
6月前
|
存储 JavaScript 前端开发
JavaScript高级主题:JavaScript 中的 Map 和 Set 是什么?它们有什么区别?
JavaScript的ES6引入了Map和Set数据结构。Map用于存储键值对,适合通过键进行查找,而Set则存储唯一值,无键且不支持键查找。两者在性能上表现出色,尤其在频繁的写入删除操作中。选择使用哪个取决于具体应用场景:键值对需求选Map,独特值集合则选Set。
49 2
|
6月前
|
存储 JSON JavaScript
JavaScript高级进阶(更新中)-javascript-gao-ji-jin-jie--geng-xin-zhong-(三)
JavaScript高级进阶(更新中)-javascript-gao-ji-jin-jie--geng-xin-zhong-
52 1