javascript - 简化 Javascript 代码的最有效方法
问题描述
我有一个函数来查找类的名称,然后根据编辑器包含库来查找。它检查函数声明以了解库是否已被导入。
该代码工作正常,但它重复。
问题:以下代码是否简化
问题:我无法将变量传递给匿名函数$.getScript
function wfRunEditors(reScann) {
if ($('.wfe-editorjs').length) {
if ('undefined' === typeof initWfEditorJS) {
$.getScript('/src/libs/js/editorjs.full.min.js', function () {
$.getScript('/src/js/editor/wfeditorjs.js', function () {
$.loadCSS('/src/css/editors/editorjs.min.css');
wfCheckerFunction['editorjs'] = true;
initWfeditorjs(reScann);
});
});
} else {
wfCheckerFunction['editorjs'] = true;
initWfeditorjs(reScann);
}
}
if ($('.wfe-trumbowyg').length) {
if ('undefined' === typeof initWfTrumbowyg) {
$.getScript('/src/libs/js/trumbowyg.full.min.js', function () {
$.getScript('/src/js/editor/wftrumbowyg.js', function () {
$.loadCSS('/src/css/editors/trumbowyg.min.css');
wfCheckerFunction['trumbowyg'] = true;
initWftrumbowyg(reScann);
});
});
} else {
wfCheckerFunction['trumbowyg'] = true;
initWftrumbowyg(reScann);
}
}
// add other editors
}
解决方案:
- 我已经缩小了所有的js文件
- init 函数和包含 css 的函数在缩小文件的末尾被调用
- 我全球化了变量 reScann
function wfRunEditors() {
let editors = [
'editorjs',
'trumbowyg'
// add other editors
];
for (i = 0; i < editors.length; i++) {
if ($('.wfe-' + editors[i]).length) {
if ('undefined' === typeof window['initWf' + editors[i]]) {
$.getScript('/src/js/editor/' + editors[i] + '.full.min.js');
} else {
wfCheckerFunction[editors[i]] = true;
window['initWf' + editors[i]]();
}
}
}
}
解决方案
第一:两个if
语句的结构不完全相同:
- 在第一个中,您加载一个名为编辑器但带有
wf
before: 的脚本,'/src/js/editor/wfeditorjs.js'
但在第二个中您没有:'/src/js/editor/trumbowyg.js'
- 在第二个
if
语句中,您还加载了一个 css 文件:$.loadCSS('/src/libs/css/trumbowyg.min.css');
如果两个if
语句具有完全相同的结构并且被调用的函数不使用 camelCase 中的编辑器名称(feinitWfeditorjs
而不是initWfEditorJS
),您可以只保存一个包含编辑器名称的数组并在for
-loop 中循环它们。
在该循环中,您可以通过与编辑器名称(例如 )连接来“构建”您的选择器字符串和 src 字符串,并$('.wfe-' + editors[i])
使用: 调用函数window['yourFunctionName'](your_function_param)
,例如window['initWf' + editors[i]](reScann)
。
此外:如果该变量像您的变量一样全局声明,则不需要将变量传递给匿名函数reScann
。
例子:
function wfRunEditors(reScann) {
let editors = [
'editorjs',
'trumbowyg'
];
for (i = 0; i < editors.length; i++) {
if ($('.wfe-' + editors[i]).length) {
if ('undefined' === typeof window['initWf' + editors[i]]) {
$.getScript('/src/libs/js/' + editors[i] + '.full.min.js', function () {
$.getScript('/src/js/editor/wf' + editors[i] + '.js', function () {
$.loadCSS('/src/libs/css/' + editors[i] + '.min.css');
wfCheckerFunction[editors[i]] = true;
window['initWf' + editors[i]](reScann);
});
});
} else {
window['initWf' + editors[i]](reScann);
}
}
}
}
推荐阅读
- docker - gerritcodereview/gerrit:XXX 和 gerritcodereview/gerrit:XXX-ubuntuXX 有什么区别?
- python - 截断的 bptt pytorch 实现问题
- java - 更改 JTextPane 中特定行的文本对齐方式
- java - Java 1.8.0_271 不符合 TLS RFC:在握手期间,服务器在没有 close_notify 或警报的情况下关闭 TCP 连接
- flutter - ChangeNotifierProxyProvider 颤动未从 ChangeNotifierProvider 获取更新
- python - Python中的一维Wasserstein距离
- javascript - 在 Google 地图标记的标签中显示错误 UTF-8 字符
- python - selenium python产品加载按钮不起作用
- python - 连续开关信号之间的行数
- python - Pytorch:将 VGG 模型转换为顺序模型,但得到不同的输出