Javascript underscore.js- 我是否必须使用上下文参数和 'this'?

Javascript underscore.js- do I have to use a context parameter and 'this'?

在我正在观看的教程中,这段代码用于演示 _.each:

var people = {
    names: ['Craig', 'John', 'Dan', 'Elijah'],
    getMessage: function(name) {
      return 'Hello there, ' + name + '!';
    }
};

_.each(people.names, function(element, index, list) {
  console.log(this.getMessage(element))
}, people);

据解释,people 作为上下文传递给 _.each 调用以将 this 绑定到 people 对象,但我不明白这是为什么必要的。在迭代器函数的主体中,我不能直接写出 people.getMessage ?

喜欢:

_.each(people.names, function(element, index, list) {
  console.log(people.getMessage(element));
});

为什么要使用 this 并且必须传入上下文?

如评论中所述,这不是必需的,但在某些情况下可能会有用。它还使迭代器函数不知道上面的范围。它只知道它正在处理具有 getMessage() 方法且未链接到闭包中特定变量的对象。

我能想到的一个例子是能够将其重复用于具有相同结构但未在范围内命名 people 的不同对象。

var people = {
    names: ['Craig', 'John', 'Dan', 'Elijah'],
    getMessage: function(name) {
      return 'Hello there, ' + name + '!';
    }
};

var dogs = {
  names: ['Jimmy', 'Rufus', 'Woofie', 'Silly'],
  getMessage: function(name) {
      return 'Woof there, ' + name + '!';
    }
};

function logTheMessage(element) {
  console.log(this.getMessage(element));
}

_.each(people.names, logTheMessage, people);
_.each(people.names, logTheMessage, dogs);