On Dec 7, 2008, at 11:51 PM, Brendan Eich wrote:

More concise function syntax is not a goal solely, or even exclusively,

Er, I meant non-exclusively.


to support user-defined control abstractions. It's a good in its own right unless you consider every use of a function expression in JS today to be a control abstraction in the Smalltalk block sense (I do not).


In some cases in strict mode 'this' will be undefined instead of being the global object, does this come close enough to omitting 'this' for functions which are not methods?

Not really -- strict mode does not change the ability of |this| to be rebound in the absence of Function.prototype.bind usage, which has its costs, and which apart from overhead in implementation terms, takes too long to say in the language to be likely as a default practice. Sure, Ajax libraries use it well, but it's still observed more in the breach looking at the whole of "web JS".

IOW, without a sugared syntax for bound methods (instance methods in a class, say), |this| is still dynamically bound depending on call expression. Passing undefined for some cases does not get rid of the "which this?" confusion.

I would be surprised if we ever evolved a version that lost the default this binding whereby

var o = {m: function(){print(this.x);}, x: 42};
o.m();

worked as it does today, without requiring heavy analysis or any incompatibility. We might someday hope, in the default version, to censor the global object, if we are lucky. Mark wrote about this recently in raising the prospect of Harmony being a successor to 3.1- strict, not 3.1.

One mountain at a time...

/be
_______________________________________________
Es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to