好事总会发生在下个转弯。希望你的愿望都能一一实现。
本文纯属个人理解,学习记录知识的笔记,如有错误请指出,我会及时改正谢谢!!
一.this指针
概念:this是当前模块或者函数的运行环境的上下文是一个指针型的变量,普通函数是在调用时才会绑定this
this的绑定规则
1.默认引用:函数独立调用时,前面没有任何修饰,非严格模式指向全局对象(window),严格模式下指向undefined, 注:普通函数作为参数传递,在setTimeOut等中的this也是指向全局对象的
function a() {}
a()
2.隐式绑定:函数调用时有显示的修饰,链式调用情况下遵循就近指向原则
var person = {
name: '11'
a: function() {
console.log('隐式调用')
}
}
peson.a()
3.显示绑定
call,apply,bind可以修改this指向第一个参数是改变this指向的对象。非严格模式下不传参数,this指向会指到全局对象
call(this, ...args)第二个参数后面的参数都以参数的行书传入
apply(this, [...args])参数以数组形式传递进去
bind会创建一个新的函数,并不会立即执行
4.new 创建一个空对象,创建空对象的__proto__指向原型对象的prototype,以新对象为this执行原有的构造函数,并且返回这个新对象
this绑定优先级是new>显示绑定>隐式绑定>默认绑定
箭头函数
1.箭头函数没有arguments,利用
let nums =(...arguments)=> consol.log(arguments)
2.箭头函数不能作为构造函数构造实例由于箭头函数没有constructor属性
3.箭头函数没有原型对象
4.箭头函数没有自己的this,是由定义的位置决定的this
闭包
闭包只那些能够访问自由变量(函数中使用的既不是函数参数又不是函数变量的变量)的函数
1.柯里化函数:可以避免频繁调用的相同参数的函数可以实现轻松复用
function getArea(width) {
return height => {
return width * height
}
}
2.可以实现私有的方法或者是变量
实现就是模块化的方式现代化的打包就是每个模块代码相互独立
3.匿名的自行执行函数
闭包的作用:创建私有变量,延长生命周期
作用域
作用域决定了代码区块中变量和其他资源的可见性
1.全局作用域:代码中任何地方都能访问到的对象(最外层函数,最外层全局变量, window)
2.函数作用域指声明在函数内部的变量
3.块级作用域(let, const)可以生成在一个函数内部或者代码块内部
特点:1声明变量不会被提升到代码块顶部2.禁止重复声明3.变量只在当前代码块中有效
作用域链
在找一个变量是如果当前作用域找不到会逐级向上查找,当前作用域是指创建函数的作用域