javascript 中this的指向

PackMan
• 阅读 742

js中this的指向比较绕,和其他语言可能有所不一样,看很多资料举的例子也很绕,这里自己做一下记录,方便牢记:

let a={
    a:1,
    check:function(){
        //这里的this指向的是该对象a的;
        console.log('check:',this);

        //匿名函数function() 会把this提升的指向window
        let b=function(){
            console.log('b:',this)
        };
        b();

        //这里是ec最新的箭头函数,箭头函数是没有this的,这里的this是外层传进来的this,也就是check函数的this;
        let c=()=>{
            console.log('c:',this)
        };
        c();
    }
};

function outfun(){
    console.log('outfun:',this);
}

//调用函数
a.check();
outfun();

//结果
check: {a: 1, check: ƒ}
b: Window {0: global, window: Window, self: Window, document: document, name: '', location: Location, …}
c: {a: 1, check: ƒ}
outfun: Window {0: global, window: Window, self: Window, document: document, name: '', location: Location, …}

说明:

1.function()函数的this指向的是外层this,这个具体要看外层是什么,如果是对象内则可能是整个对象,如果是全局函数则可能是window。
2.匿名函数this的指向是window或者undifined(typescript 严格模式)

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
4年前
java 复制Map对象(深拷贝与浅拷贝)
java复制Map对象(深拷贝与浅拷贝)CreationTime2018年6月4日10点00分Author:Marydon1.深拷贝与浅拷贝  浅拷贝:只复制对象的引用,两个引用仍然指向同一个对象
巴拉米 巴拉米
4年前
bind、call、apply 区别?如何实现一个bind?
一、作用call、apply、bind作用是改变函数执行时的上下文,简而言之就是改变函数运行时的this指向那么什么情况下需要改变this的指向呢?下面举个例子var name"lucy";const obj{    name:"martin",    say:function (){        co
Python进阶者 Python进阶者
3年前
手把手教会你JavaScript引擎如何执行JavaScript代码
JavaScript在运行过程中与其他语言有所不一样,如果不理解JavaScript的词法环境、执行上下文等内容,很容易会在开发过程中产生Bug,比如this指向和预期不一致、某个变量不知道为什么被改了,等等。所以今天我们就来聊一聊JavaScript代码的运行过程。大家都知道,JavaScript代码是需要在JavaScript引擎中运行
九路 九路
5年前
【干货】Javascript千面之变幻莫测的this指向
相信很多前端人对“this”的指向是很懵逼的,因为this的指向总是变幻莫测,在不同的调用环境中,它的指向总是各不相同。在面试中,this也是经常考的必考题之一,很多前端老鸟经常会在this这里掉坑。接下来,看笔者来一层一层的揭开this指向的面纱。1.事件调用环境中的this指向<divclass"b
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
4年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Wesley13 Wesley13
4年前
Java 多态
类型的检测——向上转型向下转型向上转型:父类对象的引用指向子类对象,向下转型:向上转型的基础上再次指向子类的对象1.向上转型!(https://oscimg.oschina.net/oscnet/dd0d05d39a724e781b799ff5e35b921775d.jpg)!(https://oscimg.oschina.net/o
Stella981 Stella981
4年前
JS 中的this指向问题和call、apply、bind的区别
this的指向问题一般情况下this对象指向调用函数的对象,全局环境中执行函数this对象指向window。functiona(){console.log(this);//输出函数a中的this对象}functionb(){};varc{name:"call"}