我不确定这是否是范围问题,因为对我来说一切似乎都很合理,但是我的变量以某种方式一直返回空值。
我试图重构这两个相似的代码并投入使用。
这些代码完全可以满足我的需要,但是当我尝试重构时,变量将继续返回空值。
有人可以帮我吗?
这是我有两个类似的代码,可以正常工作
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
在此先感谢您的帮助。
最佳答案
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);