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

项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2.箭头函数及this指向 3.promise. 4.async await语法 4.模块化 module export和import 5.解构赋值.字符串模板 …… 箭头函数 顾名思义 用箭头 “ => ” 定义函数 //es5的函数 var fn = function(num) { return n…
es6的箭头函数中this指向是跟普通function中的this指向不同的,普通function的this指向取决于调用function的对象, 而箭头函数的this指向取决于声明它的对象,看下面这个例子   var a1 = 1;             function func1(){                 this.a1 = 2;                 console.log(this.a1);             }             var func2…
OK,对于箭头函数的this 用一句话概括:箭头函数中的this指向的是定义时的this,而不是执行时的this. 如果上面这句话听的是懂非懂或者完全不懂的,没关系,下面会有案例讲解. 举个栗子 来看看this的一个使用案例: //定义一个对象 var obj = { x:100, //属性x show(){ //延迟500毫秒,输出x的值 setTimeout( //匿名函数 function(){console.log(this.x);}, 500 ); } }; obj.show();//…
箭头函数(=>):函数简写 无参数:() => {} 单个参数:x => {} 多个参数:(x, y) => {} 解构参数:({x, y}) => {} 嵌套使用:部署管道机制 this指向固定化 并非因为内部有绑定this的机制,而是根本没有自己的this,导致内部的this就是外层代码块的this 因为没有this,因此不能用作构造函数 箭头函数误区 函数体内的this是定义时所在的对象而不是使用时所在的对象 可让this指向固定化,这种特性很有利于封装回调函数 不可当…
this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this.正是因为它没有this,所以也就不能用作构造函数. 箭头函数转成ES5的代码如下. function foo() { setTimeout(() => { console.log('id:', this.id); }, 100); } // ES5 function foo() { var _this = this; setTimeout(fun…
一.定义函数的方式 //1.function const aaa = function () { } //2.对象字面量中定义函数 const obj = { bbb() { } } //3.ES6中的箭头函数 const ccc = (参数) => { } 二.箭头函数的参数和返回值 1.参数问题 //1.1两个参数 const sum = (num1, num2) => { return num1 + num2 } //1.2一个参数(括号可以省略) const power = num =…
一.ES6箭头函数 ES6之前的语法想要定义一个函数,如图example1,ES6之后定义一个函数如图example2,相比较之下简洁了很多 二.函数的this指向 非箭头函数,谁调用函数this指向谁,如下图所示 箭头函数本身没有this和arguments,它的this和aguments为父级元素的this和arguments…
let let允许你声明一个作用域被限制在块级中的变量.语句或者表达式. 还是那个经典的问题:创建5个li,点击不同的li能够打印出当前li的序号. 如果在for循环中使用**var**来声明变量i的话,将总是打印出 Item 5 is Clicked 使用let的方式来解决 var liList = document.querySelectorAll('li') // 共5个lifor( let i=0; i<liList.length; i++){  liList[i].onclick =…
document.onclick = function(){ // 普通函数的this是在运行的时候才临时绑定的,也就是说,函数不运行,你绝对不可能知道this是谁 // 下面这个函数如果是自调用,this就是window,比如情况1 // 如果是被别的对象调用的,this就是调用他的那个对象 比如情况2 function fn1(){ console.log(this) } // 情况1: fn1(); // 情况2: button.onclick = fn1(); // 箭头函数的this在…
箭头函数的this 什么是箭头函数,箭头函数是es6的新特性,其出现就是为了更好的表示(代替)回调函数 // 箭头函数 (arg1, arg2) => {} // 当箭头函数只有一个参数 arg1 => console.log(arg1) // 箭头函数隐式return arg1 => arg1 // 等价于 arg1 => return arg1 箭头函数的this不同于以上所有情况(不是在代码执行时确定),而是在箭头函数定义时确定的(类似于作用域),箭头函数的this就是其定义…
        // 问题:箭头函数中的this是如何查找的?         // 答案:向外层作用域中,一层层查找this,直到有this的定义…
es5中 this 的指向 var factory = function(){ this.a = 'a'; this.b = 'b'; this.c = { a:'a+', b:function(){return this.a} } }; console.log(new factory().c.b()); // a+ 通过es5的语法调用,返回的是 a+ ,this 的指向是该函数被调用的对象,也就是说函数被调用的时候,这个 this 指向的是谁,哪个对象调用的这个函数,这个 this 就是谁.…
首先复习下普通函数里的this指向: function test(){ console.log(this) } test() 你会秒杀的毫无疑问的回答:window,针对普通函数:谁调用了函数  函数里的this就指向谁,test()等价于window.test(),所以是window var name="outername" var o={ name:"innername", getname:function(){ console.log(this.name) }…
函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象. 箭头函数本身没有this,this继承上级的this. 定时器中箭头函数的this指向包含定时器的函数,所以定时器中的箭头函数要使用外层this的时候,不用借that传递了,正常使用即可 // 为避免频繁点击触发事件,点击之后禁用点击事件,1.5秒后解除 $('#refresh').click(function () { $(this).css('pointer-events', 'none') //定时器的this指向wi…
1.为什么要用箭头函数 简洁 易用 固定this 指向(箭头函数在this定义时候生效) 2.箭头函数分析this指向 1.this指向调用函数的对象 情况1 var obj={ a:"1", b:function(){//this指向这个function局部作用域 这个作用域的调用对象是obj 所以this指向obj return ()=>{ console.log(this); //obj console.log(this.a) //'1' } } } obj.b()();…
在javscript中,this 是在函数运行时自动生成的一个内部指针,它指向函数的调用者. 箭头函数有些不同,它的this是继承而来, 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象. var name = "window"; var test = { name:"demo", // 传统函数 getName1: function(){ console.log(this.name); // demo var that = this; setTimeo…
箭头函数是es6新增的非常有意思的特性,初次写起来,可能会觉得别扭,习惯之后,会发现很精简. 什么是箭头函数? 箭头函数是一种使用箭头( => )定义函数的新语法, 主要有以下特性: 不能通过new关键字调用 没有原型, 因为不能通过new调用,所以没有原型 没有this, super,arguments和new.target绑定, new.target和super关键字是es6新增的 箭头函数中的this,取决于他的上层非箭头函数的this指向 没有arguments对象,但是可以获取到外层函…
1.函数可以设置参数默认值 function test1(x,y=1){ console.log(x,y) } test1(10)//10 1 2.rest参数:形式为...变量名 function test2(a,...b){ for(let i of b){ a+=i } console.log(a) } // 说明传入的参数是一个一个的传入,而不是数组形式 test2(100,1,2,3) test2(100,[1,2,3,4])//1001,2,3,4 注意:如果有rest参数,那么它一…
简要介绍:箭头函数中的this,指向与一般function定义的函数不同,比较容易绕晕,箭头函数this的定义:箭头函数中的this是在定义函数的时候绑定,而不是在执行函数的时候绑定. 1.何为定义时绑定 我们来看下面这个例子: (1) var x=11; var obj={ x:22, say:function(){ console.log(this.x) } } obj.say(); //console.log输出的是22 一般的定义函数跟我们的理解是一样的,运行的时候决定this的指向,我…
这是我在公众号(高级前端进阶)看到的文章,现在做笔记 https://github.com/yygmind/blog/issues/21 上篇文章详细的分析了各种this的情况,看过之后对this的概念就很清晰了,没看过的去看看. 我们知道this绑定规则一共有5种情况: 1.默认绑定(严格/非严格模式) 2.隐式绑定 3.显式绑定 4.new绑定 5.箭头函数绑定 其实大部分情况下可以用一句话来概括,this总是指向调用该函数的对象. 但是对于箭头函数并不是这样,是根据外层(函数或者全局)作用…
背景 箭头函数,出现于ES6规范中. 使用 就是lambda函数. 一般使用: (a, b) => { return a + b; } 简略模式: 当参数只有一个时,可以省略括号:当返回值只有一个表达式时,可以省略花括号和return,但如果返回的是对象字面量{a:3},则需要花括号和return语句. a => a + b; 属性匹配: 这是一个特点,能匹配对象里的属性,如果不存在,为undefined. ({a, b}) => console.log(a, b);​//相当于func…
箭头函数感性认识 箭头函数 是在es6 中添加的一种规范 x => x * x 相当于 function(x){return x*x} 箭头函数相当于 匿名函数, 简化了函数的定义. 语言的发展都是倾向于简洁 对人类友好的, 减轻工作量的. 就相当于我最钟情的python, 有很多类似之处, 在 关于promise 文章中我会和Python 框架中的tornado 中的异步进行对比的, 很相似. 箭头函数有两种格式, 一种只包含一个表达式,没有{…} 和 return . 一种包含多条语句, 这…
处理html 页面 <body> <div class="main"> <div class="up"> <div class="black"></div> </div> <div class="down"></div> <div class="disp"></div> <input…
1. 箭头函数基本形式 let func = (num) => num; let func = () => num; let sum = (num1,num2) => num1 + num2; [1,2,3].map(x => x * x); 2. 箭头函数基本特点 (1). 箭头函数this为父作用域的this,不是调用时的this 箭头函数的this永远指向其父作用域,任何方法都改变不了,包括call,apply,bind.普通函数的this指向调用它的那个对象. let pe…
箭头函数会改变this的指向,这个大家看文档都看到过,可是有没有具体理解呢?我发现自己应该可能大概是......emmmm,然后我整理了一遍,加强一下概念吧顺带再讲一下setTimeout这个函数改写this的概念 首先分别讲一下两位主角 箭头函数:都2019年了,大家肯定不陌生了,用法很简单,可以自行百度,箭头函数有一个很大的特性是会改写内部的this指向,那么实际运用的过程中你考虑过注意过这个问题吗?箭头函数内部的this会指向声明箭头函数时所在作用域的this(划重点!!接下来要记住!)…
https://www.zcfy.cc/article/clean-up-your-vue-modules-with-es6-arrow-functions-dotdev 使用箭头函数,this指向vue示例. 一般函数的话,严格模式下this指向undefined.…
箭头函数中的this指向的是定义时的this,而不是执行时的的this . 举例: 案例中,我们的obj对象中有一个属性x和一个属性show( )方法,show( )通过this打印出x的值,结果是undefined.这是为什么呢?难道x的值不是100吗? 没错,x的值确实是100,但问题出在了this上,当代码执行到了setTimeout( )的时候,此时的this已经变成了window对象(setTimeout( )是window对象的方法),已经不再是obj对象了,所以我们用this.x获…
2015年6月17日,ECMAScript 6发布正式版本,即ECMAScript 2015. 函数作为js语言中的一等公民.自然Es6中推出的箭头函数(=>)也是备受瞩目的.那我们接下来看下传说中的“箭头函数”和function函数有什么不同吧~ 1.this的指向,函数内置 this 的值,取决于箭头函数定义的上下文环境,而非箭头函数执行的上下文环境. 2.this不可变,不同于function函数的指向(点我): 箭头函数的this的指向是一成不变的,可以理解为常量一样. 3.没有argu…
var obj1={ num:4, fn:function(){ num:5; var f=() => { num:6; console.log(this.num); //4 外层非箭头函数包裹,指向fn的作用域,即obj1 var f2=() => { console.log(this.num); //4 外层箭头函数包裹,向上寻找非箭头函数,指向fn的作用域,即obj1 } f2(); } f(); } } obj1.fn(); function foo() { console.log(t…
 壹 ❀ 引 在本文之前我已经花了两个篇幅专门介绍了JavaScript中的闭包与this,正好今早地铁上看到了两道面试题,试着做了下发现挺有意思,所以想单独写一篇文章来记录解析过程.若你对于闭包与this有所了解,不妨先看自己的理解是否正确,若你对于这部分知识欠缺,还是建议先阅读我前面的两篇文章,链接在下: 一篇文章看懂JS闭包,都要2020年了,你怎么能还不懂闭包? js 五种绑定彻底弄懂this,默认绑定.隐式绑定.显式绑定.new绑定.箭头函数绑定详解 那么本文开始.  贰 ❀ 题一 /…