Function.bind vs Closure in Javascript: как выбрать?

Как сказано здесь:

http://jqfundamentals.com/book/index.html

Закрытие также может использоваться для решения проблем с этим ключевым словом, который уникален для каждой области. Эта механизм может быть особенно полезен при обращении с обратными вызовами, хотя в эти случаи часто лучше использовать Function.bind, который избежит любых накладные расходы, связанные с объемом ВТП.

Но на самом деле он не говорит о том, как различать эти два случая. Я не понимаю на самом деле то, что автор означает, "избегайте каких-либо накладных расходов, связанных с обходом области". Можете ли вы объяснить?

Ответ 1

Взгляните на эту строку в примере в ссылке выше

console.log(self.myName, this.myName);

(с self = this; пара строк выше). Закрытый определенный метод externalFunction существует в другой области видимости, поэтому он имеет другое значение из объекта externalObj. (Self.myName!= This.myName)

Средство обхода области, когда вы достигаете захвата значения (переменной, объекта), которое существует в другой области, поэтому добавляются дополнительные накладные расходы (код становится медленнее для выполнения).

Используя bind, вы вызываете функцию с существующей областью, чтобы обход области не выполнялся.

Ответ 2

Что это значит - это такие вещи, как это

obj.doSomething = function() {
  var that = this;
  setTimeout(function() {
    // this is the window
    // that is the obj
    that.doSomethingElse();
  }, 50);
};

против

obj.doSomething = function() {
  setTimeout((function() {
    // this is the obj
    this.doSomethingElse();
  }).bind(this), 50);
};

Контрольный показатель. Никакой заметной разницы в хроме.