javascript - 具有自调用函数的数组初始化

标签 javascript iife self-invoking-function

我正在尝试用自调用函数初始化一个数组,为简单起见,假设初始值为 0 到 4 之间的数字的平方。new 关键字创建新对象,因此可以在 new 关键字之后使用 IIFE 体内的 this.xthis[x] 访问新创建对象的字段。代码是:

var arr = new (function() {
    for (var i=0; i<5; i++) { this[i]=i*i; }
})();

现在,你可以像arr[4]一样访问变量arr对应的字段,得到16。如果您只像处理对象一样处理 arr ,那完全没问题,但是一旦您尝试将其视为数组,就会遇到问题。也就是说,您不能将 reduce 之类的函数应用于它:

< arr.reduce(...);
> TypeError: arr.reduce is not a function

那是因为 arr 实际上是一个对象,而不是数组:

< arr;
> ({0:0, 1:1, 2:4, 3:9, 4:16})

所以这是我的问题:如何在这个方法中避免这种行为?如何让 JavaScript 将这个新创建的对象解释为一个数组?

最佳答案

没有 IEFE,它更短更清晰:

var arr = [];
for (var i=0; i<5; i++) arr[i] = i*i;

如果没有额外的计数器变量 i,您可以:

for (var arr=[]; arr.length<5; ) arr[arr.length] = Math.pow(arr.length, 2);

关于javascript - 具有自调用函数的数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12553923/

相关文章:

Javascript 在代码中显示 var

javascript - SAPUI5/OpenUI5 : More than one app in a portal

javascript - 未捕获的类型错误 : Failed to execute 'createObjectURL' on 'URL' : No function was found that matched the signature provided

javascript - 稍后在我的代码中调用 IIFE 时出现问题

javascript - iife 返回的函数无法正常工作

javascript - 自调用函数 javascript 来清理全局命名空间上的变量

javascript - 在解决不同的 promise 后解决要扩展的对象的正确方法

javascript - 立即调用的 setTimeOut 表达式

javascript - 这三种模块模式有什么区别?

InnerHTML - 自调用函数有效,但为什么 Jquery 文档就绪不起作用?