Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.11.2010, 13:00
Новичок на форуме
Отправить личное сообщение для qtuzov Посмотреть профиль Найти все сообщения от qtuzov
 
Регистрация: 19.11.2010
Сообщений: 5

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

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


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

Последний раз редактировалось qtuzov, 25.11.2010 в 13:27. Причина: исправление ошибки
Ответить с цитированием
  #2 (permalink)  
Старый 25.11.2010, 13:16
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

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

Последний раз редактировалось monolithed, 25.11.2010 в 17:48.
Ответить с цитированием
  #3 (permalink)  
Старый 25.11.2010, 13:25
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

в примере 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

Последний раз редактировалось Gvozd, 25.11.2010 в 13:30.
Ответить с цитированием
  #4 (permalink)  
Старый 25.11.2010, 13:27
Новичок на форуме
Отправить личное сообщение для qtuzov Посмотреть профиль Найти все сообщения от qtuzov
 
Регистрация: 19.11.2010
Сообщений: 5

Прошу прощения за неверный код, исправил. Интересует что происходит именно в (a,b)()
Ответить с цитированием
  #5 (permalink)  
Старый 25.11.2010, 13:44
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

ну, вам же уже ответили.
a и b - обычные функции
перечисление через запятую возвращает последний объект, то есть вторую функцию.
затем она вызывается самым обычным способом
Ответить с цитированием
  #6 (permalink)  
Старый 25.11.2010, 16:10
Новичок на форуме
Отправить личное сообщение для qtuzov Посмотреть профиль Найти все сообщения от qtuzov
 
Регистрация: 19.11.2010
Сообщений: 5

Благодарю за ответ.
А как объяснить то, что следующая за запятой функция вызывается в другой области видимости?
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?
Ответить с цитированием
  #7 (permalink)  
Старый 25.11.2010, 17:11
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

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

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

Последний раз редактировалось B@rmaley.e><e, 25.11.2010 в 19:26.
Ответить с цитированием
  #8 (permalink)  
Старый 25.11.2010, 17:12
Новичок на форуме
Отправить личное сообщение для qtuzov Посмотреть профиль Найти все сообщения от qtuzov
 
Регистрация: 19.11.2010
Сообщений: 5

Смущает. Я поэтому собственно и спрашиваю.
Ответить с цитированием
  #9 (permalink)  
Старый 25.11.2010, 18:00
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от qtuzov
Смущает. Я поэтому собственно и спрашиваю.
У них разная область видимости

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

alert(p);
alert(o.p);
alert(o.o());
Ответить с цитированием
  #10 (permalink)  
Старый 25.11.2010, 18:07
Новичок на форуме
Отправить личное сообщение для qtuzov Посмотреть профиль Найти все сообщения от qtuzov
 
Регистрация: 19.11.2010
Сообщений: 5

Понял, спасибо за разъяснения
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск