目录
this的作用
在js中没有this也是有其他解决方案的,但会比较麻烦
this是什么时候创建的?
this通常在函数中使用
当函数被调用时,会创建一个执行上下文,这个上下文记录着函数调用栈,AO对象,也记录了this
this是动态赋值的,与函数创建位置没关系,与调用方式有关系
this在全局作用域的指向
在浏览器上: this->window
在node环境:this->{} 原因:node把js文件当成一个模块
module -> 加载 -> 编译 -> 放到一个函数 -> 执行这个函数.call({})
this到底指向什么
绑定规则一:默认绑定
函数都是独立调用,this默认绑定全局对象
严格模式下,独立调用函数中this指向undefined
绑定规则二:隐式绑定
隐式绑定就是谁调的函数,this绑定谁
绑定规则三:显示绑定(call,apply,bind)
绑定规则四:new绑定
内置函数this的绑定
当我们调用某些API时,传入函数作为参数,在函数中打印this,this绑定谁呢?
主要是根据经验
dom事件的回调函数中this指向e.currentTarget,
规则优先级
new绑定 > 显示绑定(call/apply/bind) > 隐式绑定 > 默认绑定(独立调用)
注意:new绑定不能和call apply同时使用(都是调用函数),只能比较new 与 bind , new> bind
规则之外
另一种规则之外就是箭头函数
箭头函数
箭头函数this的获取
箭头函数没有this!!!!!!!!
箭头函数获取外层作用域的this
面试题
arguments相关
arguments是一个对应于传递给函数的参数的类数组对象
在函数被调用时,函数执行上下文时,储存AO对象中
arguments转array
arguments是一个类数组,有时需要把它转为数组(很少用到,箭头函数中也没有arguments了)
补充:slice()的实现
箭头函数不绑定arguments
箭头函数是不绑定arguments的,在箭头函数中使用arguments会往上层作用域查找,直到全局
在浏览器上,全局下是没有argumets的
在node环境中,全局下有arguments(node会将js文件当成一个moudel放到函数中)
箭头函数推荐args
...args是剩余参数
打印:[30,40,50]