函数正在重写变量.这怎么可能

Function is rewriting variable. How is this possible?

本文关键字:怎么可能 变量 重写 函数      更新时间:2023-09-26

这个函数似乎正在重写'pages'变量的值,我对此束手无策。

我尝试过通过函数返回变量,将变量硬编码到函数中,以及其他一些事情,但这似乎应该有效。

有什么想法吗

编辑:

的输出应该是一个对象数组,其格式类似于{default: "Tax Return", safe: "taxreturn"}。当第一次使用getPages('Both', 'overview', null)getPages('Both', null, 'overview')调用该函数时,它会执行此操作,但如果您多次调用它,它将出错,您会发现"pages"变量现在是一个对象数组。

var pages = [
    "Dashboard",
    "Overview",
    "Contacts",
    "Records",
    "Cash Flow",
    "Transactions",
    "Income",
    "Expenses",
    "Tax Return"
];
var getPages = function(format, includeOne, excludeOne)
{
    var pageStrings = pages;
    if(includeOne)
        for(var p = 0; p < pageStrings.length; p++)
            if(uriSafe(pageStrings[p]) == uriSafe(includeOne))
                pageStrings = [pageStrings[p]];
    if(excludeOne)
        for(var c = 0; c < pageStrings.length; c++)
            if(uriSafe(pageStrings[c]) == uriSafe(excludeOne))
                pageStrings.splice(c, 1);
    var outputArray = [];
    switch(format)
    {
        case 'UriSafe':
            for(var i = 0; i < pageStrings.length; i++)
                pageStrings[i] = uriSafe(pageStrings[i]);
            break;
        case 'Both':
            for(var x = 0; x < pageStrings.length; x++)
            {
                pageStrings[x] = {
                    default: pageStrings[x],
                    safe: uriSafe(pageStrings[x])
                };
            }
            break;
        default:
    }
    function uriSafe(str)
    {
        return str.replace(' ', '').toLowerCase();
    }
    console.log(pageStrings);
    return pageStrings;
}
var pageStrings = pages;

正在创建对同一数组对象的引用。当您通过pageString访问它时,您会更改pages所引用的同一对象。要创建它的副本(然后您可以在不更改pages的情况下从中拼接、分配属性等),请使用

var pageStrings = pages.slice();

我认为您的困惑是围绕以下行

var pageStrings = pages;

这不会创建pages的副本,它只是创建对pages的引用。这意味着您对pageStrings的值所做的任何编辑(清除、更改元素等)都将显示在pages上,因为它们引用了相同的变量。

如果您希望pageStrings拥有pages阵列的副本,请执行以下

var pageStrings = pages.slice(0);

var pageStrings = pages;是您的难题。请记住,当您以这种方式使用=时,如果右侧的参数是和数组、对象或函数,则新的var将是一个引用。使用字符串和数字,您将获得您所期望的副本。