javascript - 是否可以一口气定义并立即调用一个函数?

标签 javascript jquery

我的网站上有一些代码是

$(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/

相关文章:

javascript - 等待代理导致获取 'then' 属性,我应该返回什么?

javascript - 我如何使用纯 javascript 搜索 dom 以查找自定义链接属性?

javascript - jQuery urlencode/decode 补丁帮助

javascript - Ajax Html Editor Extender - 无法获得高度

javascript - 从 asp.net 中的代码隐藏调用 jquery 函数不起作用

jquery - Knockout.js 和 null

javascript - 容器上的滚动会改变滚动大型容器的速度

javascript - ajax jquery + bootstrap 模式仅在第二次单击时有效

javascript - 如何在 javascript 中访问对象的内容?

javascript - html 中的动态列表( Bootstrap 列表)