On Tue, Feb 8, 2011 at 2:50 PM, DaveC <[email protected]> wrote:
> Asen Bozhilov:
>
> Yeah, the point I was trying to make is that it's not a standard
> behaviour and yes each of the engines don't throw a SyntaxError - I
> think they should because (apart from Mozilla's), what they do is not
> the behaviour I would have expected.
>
> I agree that mozilla's engine behaves almost as I would have
> expected... (functions inside an if statement could be undefined)...
> however, it still feels inconsistent to me e.g.
>
>        if (0) {
>                var foo = 1;
>                var baz = 1;
>
>                function bar() {
>                        return foo;
>                }
>        }
>
>        alert(typeof foo); --> undefined
>        alert(typeof baz); --> undefined
>        alert(typeof bar); --> undefined
>
> where as...
>
>        if (1) {
>                var foo = 1;
>                var baz = 1;
>
>                function bar() {
>                        return foo;
>                }
>        }
>
>        alert(typeof foo); --> number
>        alert(typeof baz); --> number
>        alert(typeof bar); --> function
>
> The first example appears as if there is block scope - the second
> doesn't... or am I missing the point? (which would not tbe the first
> time).
>

If I rewrite the above by moving the "var" declaration atop it looks
clearer to me:

        var foo, baz;

        if (0) {
               foo = 1;
               baz = 1;

               function bar() {
                       return foo;
               }
        }

        alert(typeof foo); --> undefined
        alert(typeof baz); --> undefined
        alert(typeof bar); --> undefined

    ****************

        var foo, baz;

        if (1) {
                foo = 1;
                baz = 1;

                function bar() {
                        return foo;
                }
        }

        alert(typeof foo); --> number
        alert(typeof baz); --> number
        alert(typeof bar); --> function

it seems this syntax disambiguates the code and the implicit behavior
for the reader.

At least that is the effect it has on me ;-)

--
Diego


> Cheers,
> Dave
>
> On Feb 8, 10:25 am, "Dmitry A. Soshnikov" <[email protected]>
> wrote:
>> Yep, thanks, I aware about FSs. For the complete and detailed
>> explanation you may check "ES3. Ch5. 
>> Functions."http://dmitrysoshnikov.com/ecmascript/chapter-5-functions/(where 
>> all
>> this stuff -- FD, FE, NFE, FS, etc is discussed in detail).
>>
>> FYI: ES6 (Harmony) will standardize FSs. So currently the advice to
>> avoid them (throw in ES5 strict) seems a bit confusing, taking into
>> account that ES6 will be based on strict ES5. One could think that FSs
>> should be banned also in ES6 -- but no, they will be standardize.
>>
>> Currently FSs extension implemented in most implementations. Firefox's
>> way seems quite logical and exactly this way is chosen for ES6. Other
>> implementations just create FD as mentioned.
>>
>> BESEN implementation doesn't support FS though.
>>
>> P.S.: the article is mostly academical and explains the theoretical and
>> practical rationale (and reasons) of the "hoisting" concept. Exact FSs
>> behavior is a bit irrelevant here. Though, if to consider exactly JS
>> engines implementations, yes, FSs can be hoisted as simple FDs in all
>> implementations except Firefox.
>>
>> Dmitry.
>>
>> On 08.02.2011 0:18, DaveC wrote:
>>
>>
>>
>> > I think it worth a further nod wrt function statements inside of a
>> > block statement.
>>
>> > ECMAScript allows syntactic extensions, one such extension is to allow
>> > function statements inside of a block statement currently Mozilla is
>> > the only vendor (*I think*) that has added this extension - so I would
>> > advise against it's use as the behaviour it will inconsistent across
>> > browsers.
>>
>> > See this explanation on cljhttp://bit.ly/eu5rqw
>>
>> > Cheers,
>> > Dave
>>
>> > On Feb 7, 7:53 pm, "Dmitry A. Soshnikov"<[email protected]>
>> > wrote:
>> >> Thanks, Jose!
>>
>> >> On 07.02.2011 22:39, Jose Antonio Perez wrote:
>>
>> >>> Great article Dmitry!
>> >>> --
>> >>> To view archived discussions from the original JSMentors Mailman list:
>> >>> http://www.mail-archive.com/[email protected]/
>> >>> To search via a non-Google archive, visit here:
>> >>>http://www.mail-archive.com/[email protected]/
>> >>> To unsubscribe from this group, send email to
>> >>> [email protected]
>
> --
> To view archived discussions from the original JSMentors Mailman list: 
> http://www.mail-archive.com/[email protected]/
>
> To search via a non-Google archive, visit here: 
> http://www.mail-archive.com/[email protected]/
>
> To unsubscribe from this group, send email to
> [email protected]
>

-- 
To view archived discussions from the original JSMentors Mailman list: 
http://www.mail-archive.com/[email protected]/

To search via a non-Google archive, visit here: 
http://www.mail-archive.com/[email protected]/

To unsubscribe from this group, send email to
[email protected]

Reply via email to