如何理解“{ fun: function.bind(this) }”
How to understand "{ fun: function.bind(this) }"?
var a = 2;
var c = {
a: 3,
say: function() {
console.log(this.a);
}.bind(this);
};
c.say();
// Ouput: 2
输出是2,我不知道为什么。为什么这指向全球?
当此语句在全局范围内执行时:
var a = 2;
等于window.a = 2
.
在代码中,发生的第一件事是执行.bind(this)
方法。由于您处于全局范围内,因此此处this
指向 window
。因此,say
函数绑定到window
,并且该函数内部的this.a
变得window.a
,因此该console.log(this.a)
变得console.log(window.a)
。
为了理解行为,你必须首先了解bind
做什么。查看此文档。例如,检查以下内容:
var a = 2;
var c = {
a: 3,
say: function() {
console.log(this.a);
}.bind({a: 7});
};
c.say(); // outputs 7
当您处于匿名函数中时,您不会调用c
。请改用c.a
。
this
的默认值为 window
。此外,由于您的代码未包装在函数中,因此var a
成为window
的一部分
尝试将其包裹在 IIFE 中
(function() {
var a = 2;
var c = {
a: 3,
say: function() {
console.log(this.a);
}.bind(this)
};
c.say();
})()
相关文章:
- “this.foo”总是与“foo.bind(this)”相同吗?
- jQuery off() and bind(this)
- 如何使用.bind(this)删除对象的事件侦听器
- 函数(){}.bind(this) 和 angular.bind(this, function() {}) 之间的区别
- ESLint 和 This-Bind 运算符
- 如何在附加了 .bind(this) 的回调上删除事件侦听器
- IE 7 jquery bind and $(this)
- 使用bind(this)并一起传递参数
- bind和var self之间的差异=this
- .bind(this)vs var context=this在Javascript中-what'It’这是最好的
- Javascript bind "this" to event
- ES6中的.on('error', this. onerror .bind(this))的替代方案
- 如何理解“{ fun: function.bind(this) }”
- 为什么调用.bind(this)时函数中没有定义?
- Javascript作用域基础:.bind或self =this
- 在绑定bind()的函数中使用绑定this和this的函数范围
- 深刻理解:为什么.bind(this)在与new Promise一起使用时似乎不遵循正常的规则?
- Bind (this)在ajax成功函数上不起作用
- 防止单个属性触发this.bind("change")
- 使用&;self = this&;bind(this)用于内部函数