加载事件vs自我调用功能?

时间:2018-03-19 15:05:28

标签: javascript onload-event self-invoking-function

我想知道以下两种情况是否具有完全相同的效果和安全性? 哪一个更好的做法?

使用加载活动

if (sSessionRole === "admin") {
    window.addEventListener("load", function () {
        getAjax("api_get_users.php", getUserData);
    });
}

function getUserData(ajUserDataFromServer) {
    //console.log( "USERS ARE EDITABLE" );
    showUsers(ajUserDataFromServer);
} 

使用自我调用功能

if (sSessionRole === "admin") {
    (function () {
        getAjax("api_get_users.php", getUserData);
    })();
}

function getUserData(ajUserDataFromServer) {
    //console.log( "USERS ARE EDITABLE" );
    showUsers(ajUserDataFromServer);
}

1 个答案:

答案 0 :(得分:0)

First Things First

七年多以前,本·阿尔曼创造了“immediately invoked functions expression (IIFE, pronounced iffy)”一词来形容你所谓的 “自我调用功能”。那个词似乎已经流行起来了。

这两个有效吗?

没有。第一个设置活动发生在窗口的加载事件上。第二个立即运行它。大概你的AJAX调用是异步的,所以对DOM的更改在短时间内仍然不会发生,但这里有所不同。如果此AJAX调用返回的值随时间变化,您可能会在showUsers调用中获得不同的结果。

正如评论所指出的,这里的IIFE完全没必要。除了在混音中加入多余的功能外,它什么都不做。

性能和安全性

鉴于您有不同的行为,性能问题应该被认为没有实际意义,除非因为您在此过程的开始时间不同而可能会有不同的感知时间。你需要自己测试一下。

我发现安全问题可能没有区别。