2015-12-15 5 views
1

Я понимаю, о самостоятельных ссылающихся на анонимных функциях, например, так:В чем смысл автономных, анонимных, javascript-функций?

(function() { 
    //... 
})(); 

и что большая часть времени они используются для создания затворов и абстрагирования переменных в рамках. Однако я также видел источники на разных сайтах, объявляющих анонимные функции, но они не вызывают их. Мне любопытно, как они используются. Вызываются ли они при загрузке сценария? Обратите внимание, что на вкладке sources они не выглядят как .js-файлы. Вместо этого у них есть имя, как так:

extensions::utils или extensions::Event т.д.

Они выглядят, как будто они часть своего рода рамки/библиотеки? Я не уверен. Например extensions::Event имеет этот код внутри:

(function($Object, $Function, privates, cls, superclass) {'use strict'; 
    function Event() { 
    var privateObj = $Object.create(cls.prototype); 
    $Function.apply(cls, privateObj, arguments); 
    privateObj.wrapper = this; 
    privates(this).impl = privateObj; 
    }; 
    if (superclass) { 
    Event.prototype = Object.create(superclass.prototype); 
    } 
    return Event; 
}) //<-Self invocation missing. 

Как вы можете видеть это только декларироваться, но не используется. Единственное, о чем я могу думать, это то, что эта анонимная функция фактически назначается переменной с именем Event и является частью объекта extensions или что-то еще?

+2

Это зависит от контекста. Если бы это было загружено непосредственно в веб-браузер или Node.js, это было бы бесполезным мертвым кодом. Однако, если он находится в файле, который является частью какой-либо структуры исходного кода, шаг сборки может очень что-то сделать с этим кодом (например, вызвать его). – Pointy

+2

Где ** точно ** вы видите такой код? – Pointy

+0

https://purgegamers.true.io/g/ под no-domain – Konstantine

ответ

0

Поскольку единственное содержимое, которое имеют эти файлы, является функцией, не вызывающей самоисключение, наиболее вероятным объяснением является то, что весь контент файла получает eval ed и выполняется путем добавления () в конце. Таким образом, мы можем иметь доступ к анонимным функциям, не присваивая их переменной i.e: var reference = function() {} и все равно выполнять их при необходимости, а не во время их создания.

EDIT: Эти «файлы», похоже, используются Google Chrome. Я нашел их на несвязанных сайтах. Также я не смог найти их, когда открыл тот же сайт из firefox.