相关疑难解决方法(0)

JavaScript闭包如何工作?

您如何向知道其所包含概念的人(例如函数,变量等)解释JavaScript闭包,但不了解闭包本身?

我已经看过维基百科上给出的Scheme示例,但遗憾的是它并没有帮助.

javascript variables closures scope function

7644
推荐指数
82
解决办法
139万
查看次数

带对象的Array.prototype.fill()传递引用而不是新实例

只是一个小问题.

我正在玩弄一点,并试图实例化一个新的长度x数组,其中该数组的所有元素初始化为值y

var arr = new Array(x).fill(y);
Run Code Online (Sandbox Code Playgroud)

如果y的值不是对象,则此方法很有效.意思是y是一个对象,以下是正确的:

var arr = new Array(2).fill({});
arr[0] === arr[1]; //is true;
arr[0].test = 'string';
arr[1].test === 'string'; //is also true;
Run Code Online (Sandbox Code Playgroud)

有没有办法说明在使用fill-function时应该为每个元素创建一个新对象?或者我应该将其转换为循环?

提前致谢!

javascript arrays

41
推荐指数
4
解决办法
8668
查看次数

Push正在覆盖数组中的先前数据

我将一个类似于"John.Doe.100.Newbie-David.Miller.250.Veteran-"的字符串传递给SplitDatabase函数,该函数适当地拆分字符串并将值分配给UserDataEntry对象.然后将UserDataEntry对象推入到应该存储所有用户数据的全局UserData数组中.

但由于某种原因,UserData.push(UserDataEntry)部分似乎覆盖了UserData数组中的先前数据.第一个循环中的警报在循环时显示正确的数据,但在底部的第二个循环中的警报只是一遍又一遍地显示最后一个记录.

我不确定为什么会这样?

var UserData = [];


function SplitDatabase(result) {
    var RawUsers = result.split('-');
    var UserDataEntry = {};


    for (var i = 0; i < (RawUsers.length - 1); i++) {
        var tempUserData = RawUsers[i].split('.');
        for (var x = 0; x < (tempUserData.length); x++) {

            switch (x) {
            case 0:
                UserDataEntry.firstname = tempUserData[x];
                break;
            case 1:
                UserDataEntry.lastname = tempUserData[x];
                break;
            case 2:
                UserDataEntry.points = tempUserData[x];
                break;
            case 3:
                UserDataEntry.rank = tempUserData[x];
                UserData.push(UserDataEntry);
                alert(UserData[i].firstname);
                break;
            }
        }

    }

    for (var i = …
Run Code Online (Sandbox Code Playgroud)

javascript

29
推荐指数
2
解决办法
4万
查看次数

标签 统计

javascript ×3

arrays ×1

closures ×1

function ×1

scope ×1

variables ×1