未定义的变量?加密/解密

时间:2017-01-29 22:32:34

标签: javascript

嘿,我正在尝试制作一个简单的加密/解密javascript。我在使用第一个函数中的变量到第二个函数时遇到了很多麻烦。

第一个函数加密

第二个功能解密

问题:我无法使用我在第一个函数中使用的变量。例如,对于“编码”,它一直返回undefined!我附上了我的短代码。

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())

2 个答案:

答案 0 :(得分:0)

您应该将函数的值分配给相关范围内的变量:

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

顺便说一句,您的结果将为NaN,因为"hello".charCodeAt(5)NaNNaN * number == NaN

答案 1 :(得分:0)

因为您没有设置第一行定义的变量encoded,所以当您尝试记录它时,它的值将为undefined

<强> WHY吗

因为在code内,您在此行encoded上重新定义let encoded = ...,而在第一行定义的shadows后面encoded。所以,这里第二个被设置而不是第一个(全局一个)。

如何解决这个问题?

您要么不在函数中声明新的let encoded = ...(因此encoded = ...应该成为code。或者将encoded的返回值分配给全局var encoded = code("hello", 7); 1}}喜欢这个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.

变量阴影的示例

&#13;
&#13;
{{1}}
&#13;
&#13;
&#13;

详细了解范围可变阴影变量生命周期