Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Какая разница между анонимной функцией и той которая имеет имя? (https://javascript.ru/forum/jquery/44988-kakaya-raznica-mezhdu-anonimnojj-funkciejj-i-tojj-kotoraya-imeet-imya.html)

koderman 10.02.2014 00:37

Несколько вопросов по JQUERY.
 
1. Какая разница между анонимной функцией и той которая имеет имя?

2. Можно в Jguery применять все методы и свойства Яваскрипта?

Vlasenko Fedor 10.02.2014 00:56

1. к именной функции ты можешь обратится в другом участке кода по имени
2. Да. Jguery - фреймворк написанный на JavaScript

koderman 10.02.2014 01:00

Анонимная функция исполняется без её вызова? То есть анонимная функция исполняется когда она была написана.
А функцию с названием нужно писать в том месте где она должна выполниться?

Вот анонимная. Написали, исполнилась

function(){
var q = 11;
}


Вот с названием. Она не выполнится пока не вызовем её kode();.

function kode(){
var q = 11;
}

Vlasenko Fedor 10.02.2014 01:47

alert(kode());
      // эта строка не выполнится myfunc - не определена
      //alert(myfunc());
      function kode() {
        return 'YES';
      }
      var myfunc = function () {
          return 'Hi';
        }
      //а здесь myfunc - уже определена
      alert(myfunc());
      var a;
      (function goodbay() {
        alert('Goodbay');
        a = 10;
      }());
      alert(a)
:haha:

koderman 10.02.2014 03:28

Это понятно. Но спасибо.
Вопрос в другом был. Отличия в выполнении анонимных функций и названных функций.

danik.js 10.02.2014 04:58

Цитата:

Сообщение от koderman
Какая разница между анонимной функцией и той которая имеет имя?

Для начала, есть два типа функций: функция-выражение, и функция-объявление.

Функция-объявление выглядит так:

function fn() {

} // точка с запятой не нужна


Она может быть вызвана до (!) ее объявления. Она не может быть анонимной.

Функция-выражение используется для callback-ов, для незамедлительного вызова и т.д. Она может быть анонимной. А может и не быть таковой.
Цитата:

Сообщение от koderman
Вот анонимная. Написали, исполнилась

Твой код неправильный, он вызовет SyntaxError.
Анонимность функции никак не влияет на ее "исполнение". Анонимность птосто означает что у функции нет имени. А следовательно, единственный вариант как-то ее использовать - это сделать что-то с ссылкой на нее.

То есть это либо сразу же вызвать функцию:
(function(){})(); // скобки подсказывают интерптератору, что наша функция является функцией-выражением


Либо присвоить ссылку в переменную:
var fn = function() {}; // Да да, это анонимная функция!


Либо передать параметром в вызов другой функции:
$.post('url', function(){});


Но все эти вещи можно делать и с не-анонимной функцией:
(function fn(){ alert(typeof fn) })();

var fn = function fn() {}; //(IE старых версий колбаснет от такого кода)

$.post('url', function fn(){});

koderman 10.02.2014 21:06

Вы решительно меня не понимаете.
$(`#object`).click(function(){ alert('Text')});

Вот написалась АНОНИМНАЯ функция и ТУТ ЖЕ она исполнилась. Кючевые слова АНОНИМНАЯ и ТУТ ЖЕ.

Вот функция с названием НАПИСАЛАСЬ
var ok = function funkciya(){
 alert('123');
}


НО ИСПОЛНИЛАСЬ только ТУТ когда эту функцию ВЫЗВАЛИ.

funkciya();

danik.js 10.02.2014 21:26

Цитата:

Сообщение от koderman
Вот написалась АНОНИМНАЯ функция и ТУТ ЖЕ она исполнилась

С чего бы вдруг? Чтобы вызвать функцию, нужно дописать скобочки:

$(`#object`).click(function(){ alert('Text')}());
Цитата:

Сообщение от koderman
Вы решительно меня не понимаете.

Похоже, потому-что ты инопланетянин, и не пониаешь нас:
Цитата:

Сообщение от koderman
Вот написалась АНОНИМНАЯ функция и ТУТ ЖЕ она исполнилась. Кючевые слова АНОНИМНАЯ и ТУТ ЖЕ.

Но выше:
Цитата:

Сообщение от danik.js
Анонимность функции никак не влияет на ее "исполнение". Анонимность птосто означает что у функции нет имени


koderman 11.02.2014 03:40

Вы проверьте код. Я проверил.
Мой вариант -правильный.

$("#object").click(function(){ alert("Text")});



Происходит событие нажатия кнопки мыши и вылазит окошко алерта.


Ну да. Тут команда .click запускает функцию, поэтому скобки не нужны?


Ага. Понял. Для моментального исполнения функции (в том месте где эта функция была написана) нужно дописывать эти скобки, а если в другом месте АНОНИМНУЮ функцию выполнить хотим, то её надо переменной присвоить.
Так бы и сказали. Столько букв написали пффф.

Это я и хотел сказать в третьем сообщении http://javascript.ru/forum/jquery/44...tml#post296821
Спасибо что про скобки сказали.

danik.js 11.02.2014 09:29

Цитата:

Сообщение от koderman
Так бы и сказали. Столько букв написали пффф.

Ну я объяснил все сразу, чтобы не было непонимания. А то ты смешал в кучу анонимность, незамедлительный вызов и разницу между выражением и объявлением.

Цитата:

Сообщение от koderman
Вот написалась АНОНИМНАЯ функция.
...
Вот функция с названием НАПИСАЛАСЬ

В обоих случаях у тебя анонимная функция!!! Если бы ты прочитал внимательней мои пояснения, то понял бы это!

Просто в первом случае ссылка на функцию передается как параметр вызываемой функции click(), а во втором случае - присваивается переменной ok. И на самом деле разницы практически никакой! Ибо параметр - это тоже переменная.

$.protototype.click = function(callback) {
    // callback ссылается на нашу анонимную функцию
    // и какая хрен разница если скажем вместо этото у нас тут будет написано
    // callback = function() {};
    this.get(0).addEventListener('click', callback);
};

$(el).click(function(){});


Цитата:

Сообщение от koderman
Вот функция с названием НАПИСАЛАСЬ
var ok = function funkciya(){
 alert('123');
}


НО ИСПОЛНИЛАСЬ только ТУТ когда эту функцию ВЫЗВАЛИ.

funkciya();

Нифига не исполнится :no:
Вот так - да: ok(). А вот имя funkciya будет видно только внутри самой функции (скажем, для рекурсивного вызова). Но об этом я не писал выше.

Короче, перечитай весь тред еще раз, походу ты не все вкурил.


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