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);
};
Контрольный показатель. Никакой заметной разницы в хроме.