Verwenden von 'window', 'document' und 'undefined' als Argumente in anonymen Funktionen, die ein jQuery-Plugin umschließen

Ehrlich gesagt wusste ich nicht, wie ich den Titel kürzer machen sollte.

Ich habe gelernt, wie man ein jQuery-Plugin schreibt, indem ich die Quelle von studiert habeSlidesJS Plugin. Als ich auf etwas Neues gestoßen bin, habe ich gerade meinen guten Freund gefragtGoogle und die meiste Zeit bekam eine zufriedenstellende Antwort. Ehrlich gesagt habe ich mir nie viel Mühe gegeben. Ich weiß nur das$ ist (wahrscheinlich) eine Abkürzung für den jQuery-Objektkonstruktor und das$() undjQuery() sind dasselbe, vorausgesetzt, jQuery ist enthalten.

Vor kurzem habe ich jedoch versucht, die Wissenschaft hinter jQuery zu verstehen und zu lernen, wie man einegut jQuery-Plugin. Ich bin auf ein sehr gutes gestoßenArtikel in dem der Autor mehrere auflistetVorlagen zum Erstellen eines jQuery-Plugins. Da der Rest zu komplex für mich war, mochte ich den ersten:Ein leichter Start. Hier ist der Code für diese Vorlage.

/*!
 * jQuery lightweight plugin boilerplate
 * Original author: @ajpiano
 * Further changes, comments: @addyosmani
 * Licensed under the MIT license
 */


// the semi-colon before the function invocation is a safety 
// net against concatenated scripts and/or other plugins 
// that are not closed properly.
;(function ( $, window, document, undefined ) {

    // undefined is used here as the undefined global 
    // variable in ECMAScript 3 and is mutable (i.e. it can 
    // be changed by someone else). undefined isn't really 
    // being passed in so we can ensure that its value is 
    // truly undefined. In ES5, undefined can no longer be 
    // modified.

    // window and document are passed through as local 
    // variables rather than as globals, because this (slightly) 
    // quickens the resolution process and can be more 
    // efficiently minified (especially when both are 
    // regularly referenced in your plugin).

    // Create the defaults once
    var pluginName = 'defaultPluginName',
        defaults = {
            propertyName: "value"
        };

    // The actual plugin constructor
    function Plugin( element, options ) {
        this.element = element;

        // jQuery has an extend method that merges the 
        // contents of two or more objects, storing the 
        // result in the first object. The first object 
        // is generally empty because we don't want to alter 
        // the default options for future instances of the plugin
        this.options = $.extend( {}, defaults, options) ;

        this._defaults = defaults;
        this._name = pluginName;

        this.init();
    }

    Plugin.prototype.init = function () {
        // Place initialization logic here
        // You already have access to the DOM element and
        // the options via the instance, e.g. this.element 
        // and this.options
    };

    // A really lightweight plugin wrapper around the constructor, 
    // preventing against multiple instantiations
    $.fn[pluginName] = function ( options ) {
        return this.each(function () {
            if (!$.data(this, 'plugin_' + pluginName)) {
                $.data(this, 'plugin_' + pluginName, 
                new Plugin( this, options ));
            }
        });
    }

})( jQuery, window, document );

Ich habe die Kommentare aufgenommen, um sie in meine Fragen aufzunehmen.

Ich habe eine grobe Idee warumwindow unddocument wurden in das Argument der anonymen Funktion aufgenommen, die das Plugin umschließt(Ich weiß nicht, wie ich es sonst nennen soll) weil es in den Kommentaren angegeben ist, dass es die Ausführungszeit ein bisschen verkürzt. Aber wie geht das? Gibt es Argumente für die genannte anonyme Funktion, die das Plugin umschließt, an wen weiter? Und wie werden diese im Plugin angesprochen?

Normalerweise würde ich tun$(window).resize(function(){}) aber das geht in diesem fall nicht. Wenn ich macheconsole.log(window) In der Plugin-Funktion steht 'undefined'.

Das bringt mich zu der anderen Frage: Was ist das?nicht definiert? Ist es nicht einDatentyp das ist eine zugeordnetObjekt das ist nicht im umfang definiert? Wie kann es als Argument weitergegeben werden? Müssen die Argumente keine Objekte sein? Es gibt ein paar Zeilen darüber in den Kommentaren, aber ich verstehe kein Wort davon:So können wir sicherstellen, dass sein Wert wirklich undefiniert ist> wasaaa?

Um zusammenzufassen:

Was ist damit gemeint?function($)?Warum sollte ich einschließenwindow, document undundefined als Argumente vonfunction($)?Wenn ich es tue, wie greife ich auf das tatsächliche zu?window unddocument Objekte?undefined was und warum?

Bitte schont mich. Ich habe nie Programmiersprache als Fach studiert, um ausdrücklich Bewerbungen zu schreiben. Ich habe Basic C studiert, um Hardware-orientierte Low-Level-Routinen für winzige Kern-Mikrocontroller zu schreiben, und das war's auch schon. Ich habe C ++ ausgiebig und ein bisschen Java alleine gelernt. Nur damit Sie wissen, was Sie erwartet.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage