我的变量返回空为什么?

时间:2016-09-09 23:20:05

标签: javascript jquery string function refactoring

我不确定这是否是一个范围问题,因为对我来说似乎都是合理的,但不知怎的,我的变量一直在返回空。

我正在尝试重构这两个相似的代码并付诸实践。 代码完全符合我的需要,但当我尝试重构时,变量继续返回空。

有人可以帮我一把吗?

这是我用的两个相似的代码,工作正常

var productOutOfStock = "";
$(".availability.outofstock").each(function(){
    var outOfStockMsg = $(this).text();
    var name = $(this).closest(".basket-items").find(".product-name").text();
    if(outOfStockMsg != ""){
        productOutOfStock += name + "<br>";
    }
});

var productOffline = "";
$(".availability.instock").each(function(){
    var outOfStockMsg = $(this).text();
    var name = $(this).closest(".basket-items").find(".product-name").text();
    if(outOfStockMsg != ""){
        productOffline += name + "<br>";
    }
});

这是我正在尝试的重构,并给我空字符串

var productOutOfStock = "";
var productOffline = "";

function getProductNames(offOrNostock, nameList){
    offOrNostock.each(function(){
        var message = $(this).text();
        var productName = $(this).closest(".basket-items").find(".product-name").text();
        if(message != ""){
            nameList += productName + "<br>";
        }
    });
    console.log(nameList); //this does show the names
}

getProductNames($(".availability.outofstock"), productOutOfStock);
getProductNames($(".availability.instock"), productOffline);
console.log(productOutOfStock); //this is giving me empty string

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

JavaScript是一种按值传递的语言,因此您的字符串将作为副本传递。当函数修改nameList变量时,它会修改您传递的字符串的副本作为第二个参数。

您可以修改您的函数,使其返回更新后的字符串:

function getProductNames(offOrNostock, nameList){
    offOrNostock.each(function(){
        var message = $(this).text();
        var productName = $(this).closest(".basket-items").find(".product-name").text();
        if(message != ""){
            nameList += productName + "<br>";
        }
    });
    return nameList;
}

productOutOfStock = getProductNames($(".availability.outofstock"), productOutOfStock);