LINUX.ORG.RU

Javascriptачи-трюкачи

 


0

1

Привет, ЛОР. Читаю тут простыни разного джаваскрипта и не раз наталкиваюсь на такие конструкции:

(function() {
 ...
 // здесь тело функции
 ...
})();

или даже так:

(function(foo) {
 ...
})(this);

Что это за такие трюки, ЛОР? Объясни мне, ламеру, почему бы просто не написать код прямым текстом, без оборачивания в функцию? Эффект ведь тот же будет. И да, закралась мысль, что трюкачи подобным образом эмулируют отсутствующие в языке C-style скоупы, но ведь для этого же есть кошерный let. Короче, тут следует картинка с лётчиком и признанием, что я совершенно ничего не понял.


Если вкратце, то это - вызов анонимной функции (в первом случае) и вызов анонимной функции с передачей контекста в виде параметра по ссылке - во втором.

А аналогов в си вы не найдете, ведь си - ЯП со статической типизацией)))

k0valenk0_igor ★★★
()
Последнее исправление: k0valenk0_igor (всего исправлений: 1)
Ответ на: комментарий от k0valenk0_igor

Если вкратце, то это - вызов анонимной функции (в первом случае) и вызов анонимной функции с передачей контекста в виде параметра по ссылке - во втором.

Дык это всё понятно. Непонятно было, зачем писать так, когда можно в лоб. Но вон анонимус выше уже разжевал.

BYHYRT
() автор топика
Ответ на: комментарий от k0valenk0_igor

А аналогов в си вы не найдете, ведь си - ЯП со статической типизацией)))

Кстати... чёй-то не найду-то? :) пожалуйста (С++11):

([](){
 ...
})();

Да и типизация тут ни при чём особо, тут всё в наличии/отсутствии анонимных функций

BYHYRT
() автор топика
Ответ на: комментарий от k0valenk0_igor

А аналогов в си вы не найдете

расширение в clang:

~$ cat 1.c
#include <stdio.h>
 
int main(void) {
    ^(void){ printf("hello world\n"); }();
}

~$ clang -fblocks 1.c -lBlocksRuntime && ./a.out
hello world
wota ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.