Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поясните суть синтаксической конструкции (https://javascript.ru/forum/misc/13307-poyasnite-sut-sintaksicheskojj-konstrukcii.html)

qtuzov 25.11.2010 13:00

Поясните суть синтаксической конструкции
 
Доброго времени суток!
Объясните пожалуйста суть следующей синтаксической конструкции:

function a() { return 1; }
function b() { return 2; }
(a,b)()


Речь идет о третьей строке

monolithed 25.11.2010 13:16

var b = function(b) { return b+b; };
alert((b)(2));

Gvozd 25.11.2010 13:25

в примере monolithed, просто создается функция, которая назначается в перменнную(да, в JS функции это такие же объекты как и все остальное)
в вашем конкретном примере, еще добавляется оператор запятая, который возвращает последний элемент
var a = function() { return 1; } ;//здесь точка с запятой обязательны, во избежание ошибок
var b = function() { return 2; } ;
alert((a,b)());


http://javascript.ru/basic/functions#sozdanie-funkciy
http://javascript.ru/comma

qtuzov 25.11.2010 13:27

Прошу прощения за неверный код, исправил. Интересует что происходит именно в (a,b)()

Gvozd 25.11.2010 13:44

ну, вам же уже ответили.
a и b - обычные функции
перечисление через запятую возвращает последний объект, то есть вторую функцию.
затем она вызывается самым обычным способом

qtuzov 25.11.2010 16:10

Благодарю за ответ.
А как объяснить то, что следующая за запятой функция вызывается в другой области видимости?
var p = 'in window';
var o = 
{
  p: 'in object',
  f: function() {
    console.log(this);
    return this.p;
  }
};

console.log([
  (o.f)(),
  (o.f, o.f)()
]);

То есть получается, что перечисление функций через запятую позволяет «подняться» в нужную область видимости, вплоть до window?

B@rmaley.e><e 25.11.2010 17:11

Что? Вас наличие o. перед именем функции не смущает?

UPD: упс, туплю.

qtuzov 25.11.2010 17:12

Смущает. Я поэтому собственно и спрашиваю.

monolithed 25.11.2010 18:00

Цитата:

Сообщение от qtuzov
Смущает. Я поэтому собственно и спрашиваю.

У них разная область видимости

var p = 'in window'; // глобальная облаласть видимости
var o = {
  p: 'in object', //свойство объекта
  o: function() { //метод объекта
        return this.p;
  }
};

alert(p);
alert(o.p);
alert(o.o());

qtuzov 25.11.2010 18:07

Понял, спасибо за разъяснения


Часовой пояс GMT +3, время: 06:37.