2016-09-09 3 views
0

Ich bin mir nicht sicher, ob dies ein Problem mit dem Oszilloskop ist, weil alles für mich vernünftig erscheint, aber irgendwie bleibt meine Variable leer.meine Variable kehrt leer zurück, warum?

Ich versuche, diese beiden ähnlichen Codes zu refaktorieren und in Funktion zu bringen. Die Codes funktionieren perfekt auf meine Bedürfnisse, aber wenn ich versuche, umzuformen, bleibt die Variable leer.

Kann mir bitte jemand eine Hand geben?

Dies sind die zwei ähnlichen Codes Ich habe die ich versuche, und ich leeren String

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 

Vielen Dank im Voraus für jede Hilfe

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>"; 
    } 
}); 

Dies ist das Umgestalten gut funktioniert.

+0

Mögliche Duplikat (http://stackoverflow.com/questions/17382427/are-there -Pointer-in-javascript) –

Antwort

2

JavaScript ist eine Pass-by-Value-Sprache, daher werden Ihre Strings als Kopien übergeben. Wenn die Funktion die Variable nameList ändert, wird eine Kopie der übergebenen Zeichenfolge als zweiter Parameter geändert.

Sie könnten Ihre Funktion so modifizieren, dass sie die aktualisierte String zurückgibt: [? Gibt es in Javascript-Zeiger]

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); 
+1

Es ist Pass-by-Wert für die meisten Dinge, aber Arrays und Objekte, die Pass-by-Referenz sind. Etwas, das mich öfter überrascht hat, als ich zugeben möchte. – vlaz

+1

@Vid der Begriff "pass-by-value" ist verwirrend, weil er älter ist als das moderne Konzept von Objekten. Tatsächliche Pass-by-Reference-Sprachen (wie der alte Fortran) scheinen für moderne Programmierer wirklich seltsam zu sein; Es ist nicht das Gleiche wie die Art und Weise, wie Java und JavaScript Objektreferenzen übergeben. Objekte in JavaScript werden auch als Wert übergeben, da ein "Wert", der ein Objekt ist, ein Zeiger auf das Objekt ist und die Sprache den Zeiger übergibt. Diese Art von "Referenz" ist jedoch nicht das, was das Wort in dem Begriff "Pass-by-Reference" bedeutet. – Pointy

+0

@Dora stellen Sie sicher, dass Sie ** zwei ** Dinge tun: Fügen Sie diese 'return' Anweisung zur Funktion hinzu, ** und ** weisen Sie den Rückgabewert zurück in die Variable. – Pointy