2017-01-29 5 views
-1

Hey ich versuche, ein einfaches verschlüsseln/entschlüsseln von Javascript zu machen. Ich habe eine Menge Probleme mit Variablen aus meiner ersten Funktion in die zweite Funktion.Nicht definierte Variable? verschlüsseln/entschlüsseln

die erste Funktion verschlüsselt

2. Funktion

Problem dechiffriert: Ich kann nicht die Variablen verwenden kann ich in meiner ersten Funktion verwendet. Zum Beispiel für "verschlüsselt" kehrt es immer wieder undefiniert zurück! Ich habe meinen Kurzcode untergefügt.

var encoded; 
 
function code(string, pass) 
 
{ 
 
    array=[] 
 
    for (var i = 0; i<string.length; i++) 
 
    { 
 
     //converts code into an array & unicode 
 
     b = (string.charCodeAt(i)) 
 
     array.push(b) 
 
    } 
 
    //encovder 
 
    let encoded = array.map(function(x) 
 
    { 
 
     return x*pass 
 
    }) 
 
    return encoded 
 
} 
 
(code("hello",7)) 
 

 
//decode 
 
function decoded() 
 
{ 
 
    console.log(encoded) 
 
} 
 
console.log(decoded())

+1

Sie vergeben niemals einen Wert an die äußere codierte Variable. Sie könnten Ihren Code in 'coded = code (" hello ", 7) ändern;'. –

+1

Sie haben zwei getrennte Variablen, die beide 'encoded' genannt werden. Eines wird oben durch "var encoded" erzeugt, das andere wird durch "let coded" erzeugt und ist lokal für diese Funktion. – melpomene

+0

Sie überschreiben das äußere (globale) 'encoded' durch eine andere Variable mit dem Namen' encoded', aber mit einem anderen Bereich, wenn Sie 'let coded ...' schreiben. Das sind zwei verschiedene Variablen, also Code außerhalb des Bereichs der zweiten Variablen (d. H. Die 'code' Funktion) sehen es nicht, sie sehen die globale Variable, der nie zugewiesen wird. – jcaron

Antwort

0

Sie sollen den Wert der Funktion, um Ihre Variable in dem jeweiligen Anwendungsbereich zuordnen:

var encoded; 
function code(string, pass){ 
array=[] 
for (var i = 0; i<string.length; i++){ 
//converts code into an array & unicode 
b = (string.charCodeAt(i)) 
array.push(b) 
} 
//encovder 
let encoded = array.map(function(x){ 
    return x*pass 
}) 
return encoded 
} 
encoded = (code("hello",7)); 

Durch die Art und Weise wird Ihr Ergebnis sein NaN weil "hello".charCodeAt(5)NaN und NaN * number == NaN .

0

Da Sie die Variable encoded, die in der ersten Zeile definiert ist, nicht festlegen, wird es Wert undefined sein, wenn Sie versuchen, es zu protokollieren.

WARUM?

weil innerhalb code Sie encoded auf dieser Linie let encoded = ... neu zu definieren und die später ein shadows der auf der ersten Zeile definiert. Also, hier wird der zweite gesetzt und nicht der erste (globaler).

Wie löst man das?

Sie entweder kein neues encoded innerhalb der Funktion erklären (so sollte diese let encoded = ... dieses encoded = ... werden. Oder den Rückgabewert von code zur globalen encoded wie diese var encoded = code("hello", 7); zuweisen.

Ein Beispiel für Variable Shadowing :

var value = 5; 
 
console.log(value); // uses the above value 
 

 
function foo(){ 
 
    var value = 99; // redefining value (shadowing occur from this point) 
 
    console.log(value); // logs the newly defined value. 
 
}// at this point, the value (99) gets destroyed. 
 
foo(); 
 

 
console.log(value); // logs 5 as it is the one belonging to this scope no matter wether the value (99) gets destroyed or not.

Lesen Sie mehr über Scopes und Variable Abschattung und Variablen Lebensdauer.

Verwandte Themen