mido
mido

Reputation: 25034

Firefox: function hoisting error

I used to assume that functions always get hoisted to the top of any block of JavaScript code.

For example, this works:

document.addEventListener('something', dummy);
function dummy(){
    console.log('dummy');
}

but this doesn't work and throws ReferenceError in Firefox, but works in Chrome:

if(document){        
    document.addEventListener('something', dummy1);
    function dummy1(){
        console.log('dummy');
    }
}

Fiddle code

Initially, I assumed that Chrome would also throw an error before I tested, but somehow it works correctly. Can someone explain why it doesn't work in Firefox?

Upvotes: 6

Views: 593

Answers (1)

S McCrohan
S McCrohan

Reputation: 6693

It appears this has been an issue for quite a while - here's a reference from 2011: http://statichtml.com/2011/spidermonkey-function-hoisting.html

Apparently Firefox will happily hoist function declarations OUTSIDE of a block, but doesn't do so INSIDE a block. The author of the linked article argues this is (while unexpected) compliant with the ECMA-262 spec, which only allows statements inside of a block...as a function declaration is not a statement. However, I'll note that Firefox happily allows function declarations inside of a block - it merely refuses to hoist them.

Upvotes: 4

Related Questions