Не могу указать вас по спецификации, но я могу очень рекомендовать чтение Douglas Crockford's "Javascript: The good parts". Эта книга поможет вам понять большинство странных, но отличных функций JavaScript.
На ваш вопрос:
- foo.bar(),
this
ключевое слово в bar
функции привязан к объекту foo
- (foo.bar)() такая же, как и выше,
В javascript вы можете назначить переменные справа налево несколько раз
z = 3; x = (y = z); console.log (x); // 3
функции являются переменными как что-либо еще. Таким образом, вы назначаете функцию foo.bar
на foo.bar
, но скобка приводит к возврату назначенной функции и последующему ее выполнению.
(foo.bar = foo.bar)();
//is the same as
var f = (foo.bar = foo.bar);
f();
//and this also the same as:
var f= foo.bar;
f();
Функция возвращается из скобки не связана ни к чему, так this
будет ссылаться на глобальный объект, в случае браузеров - к window
объекту.
4 .. Предложение (foo.bar, foo.bar)() просто так:
a = (3, 4); //last value is returned, first just parsed.
//a contains 4
var f = (foo.bar, foo.bar);
//f contains body of foo.bar function,
f() // is executed in the context of `global` object, eg. `window`.
Пожалуйста, прочтите о binding
функций в JavaScript.
в IE кажется, что выход 20,20, undefined, undefined .. – RameshVel