Nunca perca o escopo novamente vinculando

Eu odeio perder escopo em Javascript, porém gosto que seja bastante flexível ao que deveria ser em qualquer situação. Existem algumas maneiras de não ter problemas com o escopo ao passar para as funções internas.

** Vanilla JS **

var myFoo = function() {
var parent = this, myBar;

myBar
= function() {
console
.debug( 'parent is', parent, 'i am', this );
}

myBar
()
}

ou

var myFoo = function() {
var myBar;

myBar
= (function() {
console
.debug( 'i am', this );
}).bind(this);

myBar
()
}

** Coffeescript **

myFoo = ->
myBar
= ( ->
console
.debug 'i am ', @
).bind @

myBar
()

ou

myFoo = ->
myBar
=>
console
.debug 'i am', @

myBar
()

Eu realmente gosto da solução de ligação, pois é uma maneira de definir a ligação para o escopo e permite cenários interessantes, onde você pode alterar dinamicamente a ligação em uma função anônima.

No entanto, o bind é mais lento do que o escopo léxico, então acho que, embora eu prefira .bind (this) a self = this, continuará sendo a melhor prática.

Espero que isso seja útil, eu realmente gosto do .bind (this) para usar sobre self = this. Isso economiza muitos problemas e mantém meu código claro