js的this

前言

之前看到了一次this是什么,但是不知道为什么没有记录。这次记录一下this是什么。

正文

当一个函数被调用时,会创建一个活动记录(也被称为上下文)。这个记录会包含函数在哪里被调用(调用栈),函数的调用方式,传入的参数等信息。this就是这个记录的一个属性,会在函数执行的过程中用到。

this指向完全取决于函数在哪里调用.函数默认是在window对象下面调用的所以默认的this指向是window, 在严格模式下this指向的是undefined。比如以下代码:

function fn1(){
    console.log(this);
}
fn1(); // window...

function fn2(){
    'use strict'
    console.log(this);
}
fn2(); // undefined

var obj = {
    x:72,
    fn:fn
};
obj.fn(); // obj...

ES5的函数总是指向的是在哪里被调用的,身处那个对象。当直接调用就属于window对象下面的,而严格模式下this指向window应该是不合理的地方所以指向undefined。

ES6的箭头函数也是可以使用this的,一般我们使用箭头函数就会避免使用this但是还是记一下,箭头函数下this在默认指向window箭头函数没有this,在箭头函数里面使用this就和使用普通变量而已,严格模式下指向undefined。箭头函数是没有自己的this的,它指向的是外层函数的this。因为它没有自己的this所以不能使用call,bind等修改this指向的方法。示例代码:


// 非严格
function fn1(){
    var fn = ()=>{console.log('this: ',this)}
    fn()
}
// 严格
fn1(); //window....
function fn2(){
    'use strict'
    var fn = ()=>{console.log('this: ',this)}
    fn()
}
fn2(); //undefined

// 在函数下调用fn2函数

var obj = {
    x:55,
    fn:fn2
}
obj.fn(); //{x: 55, fn: ƒ}

本文结束,如有任何问题请在下方留言

分享 二维码
分类:代码笔记
标签:
还没有评论


在此输入评论..
0/100