JavaScript匿名函数表达式与IIFE

dip*_*rus 7 javascript anonymous-function function-expression iife

遇到一些在表达式中使用IIFE而不仅仅是普通函数的代码.

var custom_type = (function() {
    return $('#myDiv').attr('custom_type');
})();
Run Code Online (Sandbox Code Playgroud)

通常我会写这样的东西:

var custom_type = function() {
    return $('#myDiv').attr('custom_type');
};
Run Code Online (Sandbox Code Playgroud)

IIFE的原因是什么?我唯一能想到的是,IIFE可能custom_type只在开始时分配变量一次,而第二次可能会在每次引用变量时继续检查更新的类型.

Nie*_*sol 6

在这个例子中,您可以完全省去该功能,只需:

var custom_type = $('#myDiv').attr('custom_type');
Run Code Online (Sandbox Code Playgroud)

但是一般情况下,您可以使用IIFE进行更复杂的"即时"变量赋值计算 - 如果我需要迭代某些东西,我喜欢使用它们,所以我可以在i不污染当前范围的情况下使用它.

但是在你的第二个例子中,结果完全不同 - 你需要调用函数custom_type()来获取当前值,而第一段代码将获得它的值一次,变量将保存该值.