课堂

(二)

var function变量提升

let 没有变量提升

let会锁死{}

// let a = 2;
// {
// console.log(a); // 暂存死区 被这里面的let锁死 不会向上找,除非把这里的去掉
// let a = 1;
// }
 
const 不能改变赋值的空间
const a = [];
a.push(1);是可以的
 
 
 
扩展运算符...也可以拓展对象的,不论对象有多少层。只有第一层的展开是深拷贝。
深拷贝指和对象引用的内存地址无关,浅拷贝指拷贝来的对象,所引的内存地址没变。
用JSON.parse(JSON.stringify的可以深拷贝,但是value值是函数 ,正则, new date时有点问题
let school = {
  name: 'zfpx',  a: null, d: new Date(), reg: /[0-4]/, fn: function () {
    
  }
};
let obj = {...school}
let objj=JSON.parse(JSON.stringify(school))
console.log(objj)
 
手写深拷贝
let school = {
  name: 'zfpx', 
  age: 1, 
  a: null, 
  d: new Date(), 
  reg: /reg/, 
  fn: function () {
  }
};
function deepClone(obj){
  if (obj == null) return obj; // null == undefined
  if(obj instanceof Date) return new Date(obj);
  if(obj instanceof RegExp) return new RegExp(obj);
  if (typeof obj !='object') return obj;
  let newObj = new obj.constructor;
  for (let key in obj){
    newObj[key] = deepClone(obj[key]);
  }
  return newObj
}
let d = deepClone(school); // null  undefined
console.log( d);

解构赋值

箭头函数:

如果返回的是一个对象 那需要用()包起来

let a = x => y => ({ sum: x + y });

// 箭头函数中没有arguments关键字

对象里的函数写法fn(){} 和fn:function(){}等同,

let a = 'zfpx'
let obj = {
  a:'jw',
  fn:() => {
    setTimeout(() => {
      console.log(this.a); 
    }, 0);
  }
}
obj.fn();

箭头函数this 向上级作用域查找 对象的{}不是作用域 所以 this指的是window对象 window上没a let声明的a不污染全局window

对象的get set

let o = { // 属性访问器 setter 和getter
  temp:'',
  get name(){
    return this.temp;
  },
  set name(val){
    this.temp = val;
  }
}
o.name = 'hello'
console.log(o.name);

(三)

es5的类是构造函数 

 function Animal(name){
 this.name = name;
 }
里面是实例的属性,私有属性。
 
Animal.prototype.info = { time: '100' }
原型的属性,是公有属性,实例都有该属性。
 
Animal.a='aa'
类上的属性 (静态属性)
 
// let animal1 = new Animal('哺乳类');
 
// console.log(animal1.__proto__ == Animal.prototype);
// console.log(animal1.__proto__.constructor === Animal);
// console.log(Animal.prototype.__proto__ == Object.prototype);
 
所有实例都有__proto__属性 ,Animal.prototype也有,Animal.prototype还有constructor是构造函数,也就是类
 
 
 
 
es6的类
class Animal{ // es6只支持静态的方法 并不支持静态属性 Animal.a = 1; es7支持
static a(){
return 1;
}
constructor(v){
this.name=v
}
eat(){ // 原型上的方法
console.log('吃饭')
}
}
继承:
class Cat extends Animal{
  // constructor(name){
  //    //super(name); // Animal.call(this)
  // }
}
let cat = new Cat('小猫');
console.log(cat.name)
 
 
 

(四)

for in for of foreach不能跳出循环

阻塞同步 非阻塞异步

浏览器代码执行:栈 callback 执行

node事件环

模块化:commonjs:require module.exports;es6 import export。

require的内部实现

进程:最基本的内存占用,js的进程有个一个主线程

bluedbird

猜你喜欢

转载自www.cnblogs.com/serina/p/10048270.html