JavaScript немедленно вызываемая функция выражения (IIFE) и функция Scoping

StackOverflow https://stackoverflow.com//questions/25050782

  •  21-12-2019
  •  | 
  •  

Вопрос

Пожалуйста, не стесняйтесь обновлять Tittle для более подходящего. Я не был уверен, как это слово.


Так что я разработал привычку (не уверен, если это хорошо или плохо) выполнять следующее, когда мне нужно написать jQuery для сайта. Я использую это только на быстрой и грязной рабочие места, где требуется один файл с несколькими зависимостями и AMD, EMRESJS, и Commonjs - это переплет. Он основан на выключении Эта статья Greg Franko.

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

Это говорит, что я хотел бы получить некоторые отзывы о любых проблемах, которые могут возникнуть с этой техникой, и, в частности, если я должен использовать его или другую технику.

При прохождении через jQuery я всегда получаю следующие ошибки:

'a' was used before it was defined.
         $('#a').on('click', a);

Unused 'a'.
    function a() {
.

Я знаю, почему ошибки есть и то, что они имеют в виду, но я хотел бы иметь пропустить файл JS с моими параметрами конфигурации, и он работает ...

/*jslint browser: false, couch: false, devel: false, node: false, rhino: false, passfail: false, ass: false, bitwise: false, closure: false, continue: false, debug: false, eqeq: false, evil: false, forin: false, newcap: false, nomen: false, plusplus: false, regexp: false, unparam: false, sloppy: false, stupid: false, sub: false, todo: false, vars: false, white: false, indent: 4 */
/*global window, document, location, jQuery*/

(function (appLoad) {
    "use strict";
    appLoad(window.jQuery, window, document);
}(function ($, window, document) {
    "use strict";

    $(function () {

        // These are executed when the document is ready

        $('#a').on('click', a);
        $('#b').on('click', b);
        $('#c').on('click', c);

    });

    // Logic that is not dependent on the document being ready is below here.
    // I typically place all my logic functions here for readability.

    function a() {
      ...
    }

    function b() {
      ...
    }

    function c() {
      ...
    }
}));
.

Есть ли лучший способ сделать то, что я проиллюстрировал?

Это было полезно?

Решение

jslint жаловаться только на то, что ваш код выглядит так:

$(function() {
    $('#a').on('click', a);
});

function a() {
    // ...
}
.

, а не:

function a() {
    // ...
}

$(function() {
    $('#a').on('click', a);
});
.

Так что, если вы хотите избавиться от этого предупреждения, вы можете просто переместить эти функции вокруг.

, что сказал, по возможности расхода ясности, вы можете переписать

(function (appLoad) {
    "use strict";
    appLoad(window.jQuery, window, document);
}(function ($, window, document) {
    // ...
}));
.

как

(function ($, window, document) {
    // ...
}(window.jQuery, window, document));
.

Но это не то, на что жалуется jslint.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top