closure - scope function javascript
Function.bind vs Closure en Javascript: ¿cómo elegir? (2)
A lo que se refiere son cosas como esta
obj.doSomething = function() {
var that = this;
setTimeout(function() {
// this is the window
// that is the obj
that.doSomethingElse();
}, 50);
};
vs
obj.doSomething = function() {
setTimeout((function() {
// this is the obj
this.doSomethingElse();
}).bind(this), 50);
};
Benchmark . No hay diferencia notable en el cromo.
Como se dice aquí:
http://jqfundamentals.com/book/index.html
Los cierres también se pueden usar para resolver problemas con esta palabra clave, que es única para cada ámbito. Este mecanismo puede ser particularmente útil cuando se trata de devoluciones de llamada, aunque en esos casos, a menudo es mejor usar Function.bind, que evitará cualquier sobrecarga asociada con el alcance del alcance.
Pero en realidad no dice cómo distinguir entre los dos casos. De hecho, no entiendo lo que quiere decir el autor al "evitar cualquier sobrecarga asociada con el alcance del alcance". ¿Puedes explicar?
Eche un vistazo a esta línea en el ejemplo en el enlace de arriba
console.log(self.myName, this.myName);
(con self = this; un par de líneas arriba). El cierre del método outerFunction definido, existe en un ámbito diferente, por lo que tiene un valor diferente al del objeto outerObj. (self.myName! = this.myName)
El recorrido de alcance significa que, cuando está alcanzando un valor (variable, objeto) que existe en un alcance diferente, por lo tanto, se agrega una sobrecarga adicional (el código se vuelve más lento de ejecutar).
Al usar vinculación, está llamando a una función con un alcance existente, de modo que el alcance del alcance no tenga lugar.