Newly revised Section 10 for ES3.1.

Richard Cornford Richard at
Thu Jul 10 16:02:37 PDT 2008

> In the course of this, I noticed a number of conditions that plausibly
> might be restricted in the cautious subset, but currently aren't
> specified as such:
> *        Illegal to assign to a top-level function name.
> Does anybody want to advocate for  including these restrictions
> in the cautious subset.

This last would not be a good idea in a language intended for browser 
scripting. There are circumstances were code needs to test its environment 
in order to determine how it should act. In many cases the conditions 
being tested for will not change while the script is being executed (the 
nature of a browser's object model will not change while it is executing a 
script) so repeating the test on each execution of a function is 
inefficient as the results of the test will always be the same as the 

One strategy for dealing with that is to have the first call to a function 
perform the test and so decide which actions should be take in the given 
environment and, instead of taking those actions directly, assign a new 
function to replace itself where that new function only takes the chosen 
action and so avoids the overhead of testing on all subsequent calls to 
the function. Something like:-

fucntion getSomething(arg){
        getSomething = function(x){
            //actions appropriate for case one
    }else if(caseTwoTest){
        getSomething = function(x){
            //actions appropriate for case two
        getSomething = function(x){
            //actions appropriate for other cases
    return getSomething(arg);

It is the ability to do this sort of thing that helps make javascript so 
well suited to browser scripting. 

More information about the Es4-discuss mailing list