我的网站上有一些代码
$(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();
只是以错误的方式揉搓我,让我感觉我没有使用最佳实践。
答案 0 :(得分:2)
没有优雅的方法可以做到这一点,你得到的是如何做到这一点
function updateInfo() { ... };
updateInfo();
$('elem').on('event', updateInfo);
为了完整性,您可以触发事件以在第一个页面加载以及事件触发时运行该函数。
$('elem').on('event', function updateInfo() {
// inside updateInfo
}).trigger('event');
答案 1 :(得分:2)
不,不可能声明一个函数并在同一个运行中调用它。
但是,如果您不需要声明变量(在调用后使用),则可以使用立即调用的函数表达式(IIEFE)。
如果您需要引用其正文中的函数(对于递归调用或类似函数),您仍然可以name it进行IINFE。
对于您的实际用例,将其作为事件处理程序附加并立即调用它进行初始化,您可以使用不同的模式 - 只需立即触发事件:
$('#orglist').change(updateInfo).change();
// instead of
$('#orglist').change(updateInfo);
updateInfo();
答案 2 :(得分:1)
你可以这样做,但我建议使用你发布的最新版本。以下代码段将记录running foo...
两次:
var foo = (function bar() {
console.log('running foo...');
return bar;
})();
foo();
答案 3 :(得分:1)
// Define and run
(updateInfo = function( message ) {
var el = document.createElement('div');
el.innerHTML = message;
document.body.appendChild(el);
})('Meow!!');
// Run again later
updateInfo('Bark!');
&#13;
答案 4 :(得分:1)
这会提醒Success
两次:
(window.test= function() {
alert('Success');
})();
test();
&#13;
答案 5 :(得分:0)
(function functionName () { ... })();
这将命名该函数并同时执行它。虽然我确实建议您保持定义该功能。
答案 6 :(得分:0)
如果将命名函数绑定到事件并且想要在页面加载时运行该事件,则只需要在同一元素上使用.trigger('event')
或event()
触发事件。 / p>
因此,请更换:
updateInfo();
$('#orglist').change(function () {
updateInfo();
});
使用:
$('#orglist').change(updateInfo)
.change();
答案 7 :(得分:0)
如果您的功能不需要返回任何内容,它可以自行返回,您可以按照自己的意愿行事。我不明白标准方式是如何不优雅的 - 它是可读的。但如果你真的想混淆你的jr开发人员:
var t = function(){
console.log("Weee");
return arguments.callee;
}();
t();
然后真的弄乱了头脑....
var t = function(){
console.log("Weee");
return arguments.callee;
}();
t()()()();