我的网站上有一些代码是
$(function () {
for (var k = 0; k < ogmap.length; ++k) {
$('#orglist').append($('<option></option>').text(ogmap[k]['orgname']).val(ogmap[k]['orgname']));
} // create organization option memu from list of organizations
function updateInfo() {
var newlySelectedOrg = $('#orglist option:selected').val();
$('#currorg').text(newlySelectedOrg);
var categories = [];
for (var k = 0; k < ogmap.length; ++k) {
if (ogmap[k]['orgname'] == newlySelectedOrg) {
categories = ogmap[k]['catnames'];
break;
}
} // Get array of strings corresponding to the categories for the selected organization in
$('#catlist > option').each(function () {
$(this).remove();
}); // remove current <option> list items for the categories <select> list
for (var k = 0; k < categories.length; ++k) {
$('#catlist').append($('<option></option>').text(categories[k]));
} // add new <option> list items for the categories <select> list
}
updateInfo();
$('#orglist').change(function () {
updateInfo();
});
});
因为我需要定义 updateInfo
函数并运行它,因为它是我页面预处理的一部分。这个我知道
var updateInfo() = function() { ... }
或等效的
function updateInfo() { ... }
定义函数,不运行,
(function() { ... })
运行它但保持匿名。
是否可以同时定义和运行它?
出于某种原因,拥有
function updateInfo() { ... };
updateInfo();
只是误会了我,让我觉得我没有使用最佳实践。
最佳答案
不,不可能在同一次运行中声明一个函数并调用它。
但是,如果您不需要声明变量(在调用后使用),则可以使用立即调用的函数表达式 (IIEFE)。
如果您需要在其主体内引用函数(用于递归调用或类似调用),您仍然可以 name it , 制作 IINFE。
对于您的实际用例,将其附加为事件处理程序并立即调用它进行初始化,但是您可以使用不同的模式 - 立即触发事件:
$('#orglist').change(updateInfo).change();
// instead of
$('#orglist').change(updateInfo);
updateInfo();
关于javascript - 是否可以一口气定义并立即调用一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30247962/