js中this的指向

全局

  • 全局下指向window
console.log(this)//Window

函数内

  • 普通函数的this指向window
// 1.普通函数的this指向window
function fn1() {
    console.log('fn1', this)
}
fn1()//Window
  • 箭头函数的this指向window
// 2.箭头函数的this指向window
let fn2 = () => {
    console.log('fn2', this)
}
fn2()//window

对象内

  • 对象中的普通函数,this指向obj
  • 对象中的箭头函数,this指向Window
let obj = {
    fn1: function () {
        console.log('obj--fn1', this)//对象中的普通函数,this指向obj
    },
    fn2: () => {
        console.log('obj--fn2', this)//对象中的箭头函数,this指向Window
    },
    obj1: {
        fn1: function () {
            console.log('obj1--fn1', this)//this指向obj1
        },
        fn2: () => {
            console.log('obj1--fn2', this)//对象中的箭头函数,this指向Window
        }
    }
}
obj.fn1()//obj
obj.fn2()//Window
obj.obj1.fn1()//obj1
obj.obj1.fn2()//Window
  • 对象内立即执行函数的this指向window
function fn1() {
    console.log('fn1', this)
}

let obj = {
    fn3: (function () {
        console.log('obj--fn3立即执行函数', this)
    })(),
    fn4: fn1(),
    fn5: function () {
        console.log('obj--fn5')
    }
}
//立即执行函数会立即执行(即使没有调用fn3),并且把其之后的fn1也执行,但是不会执行fn5
//直接调用fn3会报错
//obj.fn3()//Uncaught TypeError: obj.fn3 is not a function
//obj.fn3//程序会忽视这句话,直接跳过不报错

  • 对象中立即执行函数的执行顺序:从上到下依次执行到该对象的创建位置时,先执行立即执行函数,再执行对象调用的其他方法,注意,立即执行函数会把在其之后的代码也执行(如果可以执行的话)
posted @   qiao101  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示