函数是重写变量.这怎么可能?

Dom*_*rez 0 javascript arrays function

这个函数似乎正在重写'pages'变量的值,而我在这个变量的结尾处.

我已经尝试通过函数返回变量,将变量硬编码到函数中,以及其他一些东西,但这似乎应该可行.

有任何想法吗?

编辑:

输出应该是一个像这样格式化的对象数组{default: "Tax Return", safe: "taxreturn"}.功能,当第一次调用getPages('Both', 'overview', null),并getPages('Both', null, 'overview')做到这一点,但如果你把它更多的时候,它会报错,你会发现,"网页"变量现在是对象的数组.

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;

}
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 7

var pageStrings = pages;
Run Code Online (Sandbox Code Playgroud)

正在创建对同一个数组对象的引用.当您通过它访问它时pageString,您将更改pages引用的相同对象.要创建的副本(然后您可以从中进行拼接,将属性分配给等,而不进行更改pages),请使用

var pageStrings = pages.slice();
Run Code Online (Sandbox Code Playgroud)

  • 这里的值是对存储对象的内存中的位置的引用.每次都只复制数字,布尔值或字符串(不可变)等原始值. (3认同)