es6的箭头函数中this指向是跟普通function中的this指向不同的,普通function的this指向取决于调用function的对象,

而箭头函数的this指向取决于声明它的对象,看下面这个例子

       var a1 = 1;
            function func1(){
                this.a1 = 2;
                console.log(this.a1);
            }
            var func2 = () =>{
                console.log(this.a1)
            }
            function func3(){
                this.say = () =>{
                    console.log(this.a1)
                }
            }
            new func1();//2
            func2();//1
            new func3().say();//undefined

func1因为是new形式调用的,func1充当了一个构造器的作用,所以this是指向func1所构造的一个实例,因此func1中的this指向func1实例,而非全局作用域

func2是箭头函数,不过要注意func2不能以new的形式调用,而func2是在全局作用域被声明的,所以func2内访问this.a1相当于window.a1即全局变量a1

func3的作用域内声明了名为say的箭头函数,所以以构造器函数形式调用func3时,func3.say方法this指向的是func3的实例,但是func3并没有定义名为a1的成员变量,所以最后打印结果就是undefined了

箭头函数的this指向的更多相关文章

  1. 前端项目中常用es6知识总结 -- 箭头函数及this指向、尾调用优化

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  2. 箭头函数的this指向问题-一看就懂

    OK,对于箭头函数的this 用一句话概括:箭头函数中的this指向的是定义时的this,而不是执行时的this. 如果上面这句话听的是懂非懂或者完全不懂的,没关系,下面会有案例讲解. 举个栗子 来看 ...

  3. ES6箭头函数及this指向

    箭头函数(=>):函数简写 无参数:() => {} 单个参数:x => {} 多个参数:(x, y) => {} 解构参数:({x, y}) => {} 嵌套使用:部署 ...

  4. 箭头函数的this指向问题

    this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this.正是因为它没有this,所以也就不能用作构造函数 ...

  5. 箭头函数以及this指向问题

    一.定义函数的方式 //1.function const aaa = function () { } //2.对象字面量中定义函数 const obj = { bbb() { } } //3.ES6中 ...

  6. ES6箭头函数与this指向

    一.ES6箭头函数 ES6之前的语法想要定义一个函数,如图example1,ES6之后定义一个函数如图example2,相比较之下简洁了很多 二.函数的this指向 非箭头函数,谁调用函数this指向 ...

  7. ES6——>let,箭头函数,this指向小记

    let let允许你声明一个作用域被限制在块级中的变量.语句或者表达式. 还是那个经典的问题:创建5个li,点击不同的li能够打印出当前li的序号. 如果在for循环中使用**var**来声明变量i的 ...

  8. 关于箭头函数的this指向问题

    document.onclick = function(){ // 普通函数的this是在运行的时候才临时绑定的,也就是说,函数不运行,你绝对不可能知道this是谁 // 下面这个函数如果是自调用,t ...

  9. 箭头函数this的指向

    箭头函数的this 什么是箭头函数,箭头函数是es6的新特性,其出现就是为了更好的表示(代替)回调函数 // 箭头函数 (arg1, arg2) => {} // 当箭头函数只有一个参数 arg ...

随机推荐

  1. Rider 中无法显示DataTable,VS2019的.netCore才有DataTable可视化工具(4)

    如下图在vs2017中是这样的 在2019中是可以直接看的 在Rider中无论什么项目都不支持.

  2. VSCode批量替换使用注意问题

    VSCode批量替换功能很强大,需要注意两点 1.不要搜到文件个数超过到10000时替换,这时替换过程中可能会出错崩溃(也可能是服务器上内存较小导致) 2.不要在搜索中反复替换可能会导致数据错乱 比如 ...

  3. Centos6 No CMAKE_CXX_COMPILER could be found

    [1]问题现象 cmake发生异常:如下图所示 [2]问题分析 Centos6 上使用Cmake出现错误 "No CMAKE_CXX_COMPILER could be found.&quo ...

  4. oracle查看执行计划入门

    基于Oracle的应用系统很多的性能问题都是由应用系统的SQL性能低劣引起的,因此SQL的性能优化非常重要.要分析与优化SQL的性能,一般是通过查看该SQL的执行计划,然后通过执行计划有针对性地对SQ ...

  5. json工具类(一)——alibaba包

    package com.ruoyi.common.utils.json; import java.util.HashMap; import java.util.List; import java.ut ...

  6. 利用kibana学习 elasticsearch restful api (DSL)

    利用kibana学习 elasticsearch restful api (DSL) 1.了解elasticsearch基本概念Index: databaseType: tableDocument: ...

  7. 2019-11-29-WPF-高速书写-StylusPlugIn-原理

    原文:2019-11-29-WPF-高速书写-StylusPlugIn-原理 title author date CreateTime categories WPF 高速书写 StylusPlugIn ...

  8. c#小知识点总结

    实例化实例化就是将抽象变为具体,只说猫是抽象的,但是我要具体到一只单独的老猫A,那么这只猫被实例化.实例化就是一个抽象变具体的过程,也可以说为声明一个变量声明变量. int a=1,这其实也是一个实例 ...

  9. 使用XSSFWorkbook 读取excel

    工作中用到 使用XSSFWorkbook 读取excel 具体代码如下, private (List<(string columnName, string colomnDescription)& ...

  10. 用jquery写自己的form表单验证

    这几天看了锋利的jquery,感觉很不错.特别是jquery强大的选择器.今天就利用jquery写了一个自己的form表单验证的小案例.当巩固下jquery.首先贴下代码,当然只是一个小案例. 思路: ...