gpt4 book ai didi

javascript - 条件后自执行函数传递对象

转载 作者:行者123 更新时间:2023-11-29 16:15:09 24 4
gpt4 key购买 nike

我遇到了一个自执行函数,它在声明的包含 var 存在的条件下执行,如果它不存在,则传递一个对象。

例子:

var myFunc = (function(myFunc){}(myFunc || {}));

为什么会有一个“或”条件运算符来传递一个对象?

最佳答案

您提供的代码是 module pattern 的示例.特别是它是 loose augmentation 的一个例子模块模式。

模块模式基本上只是一个immediately invoked function expression (IIFE)。它返回一个对象。例如:

// file 1

var MODULE = (function () {
var my = {}, privateVariable = 1;

function privateMethod() {
// ...
}

my.moduleProperty = 1;

my.moduleMethod = function () {
// ...
};

return my;
}());

扩充允许您将模块拆分为多个部分。每个部分都可以驻留在它自己的文件中。例如,我们可以按如下方式扩充上述模块:

// file 2

var MODULE = (function (my) {
my.anotherMethod = function () {
// added method...
};

return my;
}(MODULE));

但是,在这种增强模式中,文件 1 必须在 文件 2 之前加载,否则您将收到错误消息。松散扩充允许您以任何顺序加载文件。

var MODULE = (function (my) {
// add capabilities...

return my;
}(MODULE || {}));

在上面的示例中,模块 MODULE 可以拆分为多个文件,这些文件可以按任何顺序加载。表达式 MODULE || {} 评估为 MODULE(如果它存在)。否则它的计算结果为 {}

因此,对于加载的第一个文件,表达式的计算结果将是 {},因为 MODULE 最初是 undefined。在后续文件中,表达式的计算结果为 MODULE

关于javascript - 条件后自执行函数传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17630377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com