Javascript 我的变量返回为空,为什么?
我不确定这是否是一个范围问题,因为对我来说一切似乎都是合理的,但不知何故,我的变量总是返回空的 我正试图重构这两个相似的代码并将其应用到函数中。 这些代码完全符合我的需要,但当我尝试重构时,变量总是返回空 谁能帮我一下吗 这是两个类似的代码,我有它的作品很好Javascript 我的变量返回为空,为什么?,javascript,jquery,string,function,refactoring,Javascript,Jquery,String,Function,Refactoring,我不确定这是否是一个范围问题,因为对我来说一切似乎都是合理的,但不知何故,我的变量总是返回空的 我正试图重构这两个相似的代码并将其应用到函数中。 这些代码完全符合我的需要,但当我尝试重构时,变量总是返回空 谁能帮我一下吗 这是两个类似的代码,我有它的作品很好 var productOutOfStock = ""; $(".availability.outofstock").each(function(){ var outOfStockMsg = $(this).text(); v
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=“”;
$(“.availability.outofstock”)。每个(函数(){
var outOfStockMsg=$(this).text();
var name=$(this).closest(“.basket items”).find(“.product name”).text();
如果(outOfStockMsg!=“”){
productOutOfStock+=名称+“
”;
}
});
var=”;
$(“.availability.instock”)。每个(函数(){
var outOfStockMsg=$(this).text();
var name=$(this).closest(“.basket items”).find(“.product name”).text();
如果(outOfStockMsg!=“”){
productOffline+=name+“
”;
}
});
这是我正在尝试的重构,并给我空字符串
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
var productOutOfStock=“”;
var=”;
函数getProductNames(offOrNostock,名称列表){
offOrNostock.each(函数(){
var message=$(this.text();
var productName=$(this).closest(“.basket items”).find(“.product name”).text();
如果(消息!=“”){
名称列表+=productName+“
”;
}
});
console.log(nameList);//这会显示名称
}
getProductNames($(“.availability.outofstock”)、productOutOfStock);
getProductNames($(“.availability.instock”)、productOffline;
控制台日志(productOutOfStock)//这是给我的空字符串
提前感谢您的帮助。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);
函数getProductNames(offOrNostock,名称列表){
offOrNostock.each(函数(){
var message=$(this.text();
var productName=$(this).closest(“.basket items”).find(“.product name”).text();
如果(消息!=“”){
名称列表+=productName+“”; } }); 返回姓名列表; } productOutOfStock=getProductNames($(“.availability.outofstock”),productOutOfStock;
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);
函数getProductNames(offOrNostock,名称列表){
offOrNostock.each(函数(){
var message=$(this.text();
var productName=$(this).closest(“.basket items”).find(“.product name”).text();
如果(消息!=“”){
名称列表+=productName+“”; } }); 返回姓名列表; } productOutOfStock=getProductNames($(“.availability.outofstock”),productOutOfStock;
对于大多数事物,可能重复其传递值,但数组和对象是通过引用传递的。有些事情让我措手不及的次数比我愿意承认的要多。@Vid术语“传递值”令人困惑,因为它比现代的对象概念更古老。对于现代程序员来说,实际的传递引用语言(如旧的Fortran)似乎真的很奇怪;这与Java和JavaScript传递对象引用的方式完全不同。JavaScript中的对象也是按值传递的,因为作为对象的“值”恰好是指向该对象的指针,而语言传递该指针。然而,这种“引用”并不是术语“按引用传递”中的意思。@Dora请确保您做了两件事:将
return
语句添加到函数中,并将返回值赋回到变量中。明白了!thx thx,我在没有运气之前尝试过,因为我返回了语句,但没有再次将其赋值。更多地了解这是如何工作的。我记得读过这篇文章,但以前从未做过D帮了大忙。我知道我可以测试一下,但我只是想确定我是对的。实际上第二个参数根本不需要,不是吗?在函数返回nameList
之后,我可以在函数内部创建一个新的var nameList
,然后将它分配给其他变量,例如productOutOfStock
它是大多数事物的传递值,但数组和对象是通过引用传递的。有些事情让我措手不及的次数比我愿意承认的要多。@Vid术语“传递值”令人困惑,因为它比现代的对象概念更古老。对于现代程序员来说,实际的传递引用语言(如旧的Fortran)似乎真的很奇怪;这与Java和JavaScript传递对象引用的方式完全不同。JavaScript中的对象也是按值传递的,因为作为对象的“值”恰好是指向该对象的指针,而语言传递该指针。然而,这种“引用”并不是术语“按引用传递”中的意思。@Dora请确保您做了两件事:将return
语句添加到函数中,并将返回值赋回到变量中。明白了!thx thx,我在没有运气之前尝试过,因为我返回了语句,但没有再次将其赋值。更多地了解这是如何工作的。我记得读过这篇文章,但以前从未做过D帮了大忙。我知道我可以测试一下,但我只是想确定我是对的。实际上第二个参数根本不需要,不是吗?在函数返回nameList
之后,我可以在函数内部创建一个新的var nameList
,然后将其分配给其他变量,如productOutOfStock