Are "(function ( ) { } ) ( )" and "(function ( ) { } ( ) )" functionally equal in JavaScript? -
this question has answer here:
both of these code blocks below alert foo bar. difference })() , }()).
code 1:
(function() { bar = 'bar'; alert('foo'); })(); alert(bar); code 2:
(function() { bar = 'bar'; alert('foo'); }()); alert(bar); so there difference, apart syntax?
no; identical
however, if add new beforehand , .something afterwards, different.
code 1
new (function() { this.prop = 4; }) ().prop; this code creates new instance of function's class, gets prop property of new instance.
returns 4.
it's equivalent
function myclass() { this.prop = 4; } new myclass().prop; code 2
new ( function() { return { class: function() { } }; }() ).class; this code calls new on class property.
since parentheses function call inside outer set of parentheses, aren't picked new expression, , instead call function normally, returning return value.
new expression parses .class , instantiates that. (the parentheses after new optional)
it's equivalent to
var namespace = { class: function() { } }; function getnamespace() { return namespace; } new ( getnamespace() ).class; //or, new namespace.class; without parentheses around call getnamespace(), parsed (new getnamespace()).class — call instantiate getnamespace class , return class property of new instance.
Comments
Post a Comment