Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的变量返回为空,为什么?_Javascript_Jquery_String_Function_Refactoring - Fatal编程技术网

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