递归和闭包-

闭包

内部函数可以访问外部函数的值 该值长期存储在内存中 因此产生了闭包

闭包是一种保护私有变量的机制 在函数执行时形成私有的作用域 班里里面的私有变量不受外界感染 形成一个不销毁的栈环境 实现了传递值和功能的调用

优点:避免变量污染全局 变量的叠加使用

缺点:因为常驻内存 如果有大量闭包不被释放 容易造成内存溢

var let const 关键字的区别

let/const声明的变量只在let/const命令所在的代码块{}内有效 在{}之外不能访问

使用let/const关键字声明的全局作用域变量不属于window对象 所有不可以用window 变量名的方式访问这些变量

var 变量提升 let const不会

var可以重复声明 let const 不可以

let声明的变量可以重复赋值 const不可以

let和var都用于声明变量 const用于声明常量

function和箭头函数的区别

箭头函数不可以当做构造函数 不可以使用new命令 否则会抛出错误

this arguments caller等对象在箭头函数体内都不存在

箭头函数this指向上一层作用域 function的this指向调用他的对象

js工厂函数

工厂函数用于创建对象的一个函数 这些内建函数都是类对象 调用时实际上是创建了一个类实例 也就是先利用类创建一个对象 返回返回这个对象 创建的函数都拥有相同的属性 是一个函数 用来创建对象 向工厂一样 生产出来的函数都是标准件(拥有同样的属性)

原型链--函数与对象的关系

function函数是所有函数的祖先函数

所有构造函数都有一个prototype属性叫原型对象 也称为显式原型

所有原型对象都有一个constructor属性 指向被new的构造函数

被new出来的对象叫实例对象它们都有一个__proto__对象 叫隐式原型 它指向构造函数的prototype对象

原型链就是当从对象上获取属性的时候 查找顺序先从对象自身查找 如果没有就沿着__proto__一直找

更改this指向的三种方法

call

语法:函数名.call(调用者,参数1,...)

作用:函数被借用时 会立即执行 并且函数体内的this会指向借用者或调用者

apply

语法:函数名.apply(调用者,[参数,...])

作用:函数被借用时 会立即执行 并且函数体内的this会指向借用者或调用者

bind

语法:函数名.bind(调用者,参数,...)

作用:函数被借用时 不会立即执行 而是返回一个新的函数 需要自己手动调用新的函数来改变this指向

总结:相同点:三者都可以把一个函数应用到其他对象身上 注意不是自身对象

不同点:call,apply是直接执行函数调用 bind是绑定 执行需要再次调用

call bind接收逗号分隔的无限个参数列表 apply接收数组作为参数

暂时性死区

es6: 当let或const放在{}里的时候 这个{}就会变成块级作用域 被let或const声明的变量锁死--暂时性死区

es5: 作用域只有全局的window和局部的函数作用域 受条件限制 for循环 if和switch里的变量会污染全局 现在有了let和cosnt之后 凡事有{}的代码块里面使用了let或const 则{}就会变成块级作用域

Es6的class类

class类是使用函数的prototype对象封装的 可以实现封装 多态和继承

类有constructor函数作为初始化类时调用的第一个构造函数

类使用extends实现类之间的继承

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值