One more comment: fixing the `this` problem is why I like lambda blocks so 
much: They can only be used in a non-method capacity and the meaning of `this` 
does not have to change, dynamically, any more – it is always lexically bound.

On Nov 18, 2011, at 22:18 , Jake Verbaten wrote:

> Currently in ES5 strict mode the value of `this` is `undefined` by default.
> 
> function foo() {
>   return this;
> }
> 
> foo(); // undefined
> 
> function foo() {
>   return (function () {
>     return this;
>   }());
> }
> 
> foo.call(o); // undefined
> 
> Since the default value of `this` is always undefined, the `var that = this;` 
> or `var self = this;` pattern has occurred. An alternative to this pattern is 
> using .bind on a function.
> 
> var Obj = {
>   method: function () {
>     var that = this;
>     el.addEventListener("click", function () {
>        that.doSomethingElse();
>     });
>   }
> }
> 
> Basically whenever a javascript developer want's to do an asynchronous 
> operation using a closure inside a method he has to keep a handle on the 
> value of `this` because the value of `this` inside the closure is useless. 
> This is more common in environments where asynchronous operations are more 
> common, like node.js.
> 
> What if we changed the value of `this` inside local function declarations to 
> be the value of this in the outer function. That would mean
> 
> function foo() {
>   return (function () {
>     return this;
>   }());
> }
> 
> foo.call(o); // o
> 
> Pros: 
>  - Removes the majority of the use-cases for `var that = this`
>  - Puts a value of `this` to good use rather then being `undefined`.
> 
> Cons:
>  - Makes `this` more "confusing"
>  - Breaks ES5 strict code that assumes `this === undefined`
> 
> Personally I say that value of `this` is undefined in ES5 strict. So nobody 
> uses it. So this is an optional addition that would make life easier for 
> people who want to use it.
> 
> Optional: Change the value of `this` to be the outer function `this` in 
> non-strict mode (breaking a large amount of code. I don't think we can get 
> away with that).
> _______________________________________________
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss

-- 
Dr. Axel Rauschmayer
a...@rauschma.de

home: rauschma.de
twitter: twitter.com/rauschma
blog: 2ality.com



_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to