THIS : 函数执行的主体,(谁把函数执行了,this就是谁)

    • 事件绑定
    • 函数执行 [普通函数执行,成员访问,匿名函数,回调函数 …]
    • 函数构造
    • 箭头函数 [生成器函数 generator]
    • 基于 call/apply/bind强制修改this指向

    console.log(this)
    //this -> 全局上下文中的 this:window
    块级上下文中没有自己的this,所用的this都是继承上级上下文中的this [箭头函数也是]

    • *事件绑定

      DOM0: xxx.onxxx = function(){}
      DOM2:
      xxx.addEventListenter(‘xxx’, function(){}) // 不兼容IE6/7/8 —对应的移除事件绑定 remove…
      document.body.attachEvent(‘onxxx’, function(){}) // 兼容IE6/7/8 —对应的移除事件绑定dis….
      给当前元素的某个事件行为绑定方法 [创建方法,方法还没执行]当事件行为触发,浏览器会把绑定的函数执行,此时函数中的this 是当前元素对象本身
      特殊性:
      基于attachEvent实现事件绑定,方法执行,方法中的this是window

    document.body.addEventListener(‘click’, function(){
    console.log(this) // this -> body
    })

    • 函数执行

    正常普通函数执行,看函数执行前是否有 “点”,“点” 前面是谁 this就是谁,没有this,this就是window [严格模式下是undefined]
    匿名函数:
    函数表达式:等同于普通函数或者事件绑定等机制
    自执行函数:this一般都是window/undefined
    回调函数:一般都是window/undefined,但是如果另外函数执行中,对回调函数的执行做了特殊处理,以自己处理的为主
    括号表达式:小括号包含“多项”,这样也只取最后一项,但是this收到影响(一般是window/undefined)
    “use strict” //开启严格模式(默认非严格模式)严格模式下 全局this为undefined 【高程3 严格模式/非严格模式区别】

    function fn(){
    console.log(this)
    }
    let obj = {
    name: ‘zhufeng’,
    fn
    }

    fn() // this -> window/undefined
    obj.fn() // this -> obj
    (10, obj.fn)() // this -> window/undefined

    // 自执行函数
    (function(x){
    console.log(this) // this -> window/undefined
    })(10) // 实参

    //回调函数:把一个函数A当作实参,传递给;另外一个执行的函数B [在B函数执行中,可以把A执行]
    function fn(callback){
    // callback -> 匿名函数
    callback() // callback执行等于让fn执行
    }
    fn(function()
    console.log(this)
    {})

    let arr = [10, 20, 30]

    arr.forEach(function(){
    console.log(this) // window
    })
    arr.forEach(function(){
    console.log(this) // 第二个参数对象 forEach内部做处理了
    },{aa: ‘aaa’})

    setTimeout(function(x){
    console.log(this, x) // this-> window 10
    },1000, 10) // 多余的会作为参数传递

    面试题:
    5.png