this
可以看作一个变量吗?
箭头函数没有this
,如果它的this
是从作用域链继承而来的,是不是就相当于一个闭包。
箭头函数使用this
时就是使用的外层的this
,不知道这样理解对不对。
bind
函数内部是如何影响this
的指向的,如果箭头函数的this
是继承来的,为什么不能被改变。
this
可以看作一个变量吗?
箭头函数没有this
,如果它的this
是从作用域链继承而来的,是不是就相当于一个闭包。
箭头函数使用this
时就是使用的外层的this
,不知道这样理解对不对。
bind
函数内部是如何影响this
的指向的,如果箭头函数的this
是继承来的,为什么不能被改变。
箭头函数没有this。
类似于
function block (){
let _this = a
() => { console.log(_this) }
}
因为箭头函数本身是没有this
的,所以才会去找声明时最近的this
(就近)
https://developer.mozilla.org...
箭头函数表达式的语法比函数表达式更短,并且不绑定自己的this,arguments,super或 new.target。这些函数表达式最适合用于非方法函数,并且它们不能用作构造函数。
你可以认为它创建时已经bind
了。我知道解释器不一定这么实现,但它的行为是等价的。
var f = function(args) {/*...*/}.bind(this)
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答897 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
箭头函数的特点之一就是不绑定新的this,所以箭头函数的this是在词法层面就绑定到了外层作用域,他的this只能是来自外层作用域的this,无论你通过什么方式都不能改变,除非你修改了外层作用域的this。
像apply、call、bind方法都只是在语法层次来修改函数的this指向。
关于bind的函数的实现,这里贴一个bind的polyfill:
具体可以参考MDN上的两篇教程: