JavaScript немедленно вызываемая функция выражения (IIFE) и функция Scoping
-
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.