如何理解“{ fun: function.bind(this) }”

How to understand "{ fun: function.bind(this) }"?

本文关键字:this bind function 何理解 fun      更新时间:2023-09-26
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();
})()