嘿,我正在尝试制作一个简单的加密/解密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())
答案 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)
为NaN
和NaN * 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.
。
变量阴影的示例:
{{1}}&#13;
详细了解范围和可变阴影和变量生命周期。