为什么输出是';未申报的';对于这个JavaScript代码?

为什么输出是';未申报的';对于这个JavaScript代码?,javascript,string,Javascript,String,我创建了一个简单的JS方法来反转字符串。但是当我执行代码时,我会在警报框中得到输出为UndeclarednoynaCUndeclared。有人能告诉我我做错了什么吗 功能反转(str){ var len=str.length; 对于(var i=0;i而言,关键是rev最初没有值(是未定义的或未声明的),将其分配给空字符串是第一个未定义的的修复 最后一个未定义的出现长度的b/c的字符串元素从不存在(b/c从0开始计算),因此您需要替换: i重点是rev最初没有值(是未定义的或未声明的),将其分

我创建了一个简单的JS方法来反转字符串。但是当我执行代码时,我会在警报框中得到输出为
UndeclarednoynaCUndeclared
。有人能告诉我我做错了什么吗

功能反转(str){
var len=str.length;

对于(var i=0;i而言,关键是
rev
最初没有值(是
未定义的
未声明的
),将其分配给空字符串是第一个
未定义的
的修复

最后一个
未定义的
出现
长度的b/c
的字符串元素从不存在(b/c从0开始计算),因此您需要替换:


i重点是
rev
最初没有值(是
未定义的
未声明的
),将其分配给空字符串是第一个
未定义的
的修复

最后一个
未定义的
出现
长度的b/c
的字符串元素从不存在(b/c从0开始计算),因此您需要替换:


i由于变量
rev
的原因,您将获得该输出。在语句
var rev=str[i]中使用变量之前,首先声明变量的值
undefined
+rev;
。在
之前为
循环声明
var rev='
。另一点是循环执行了一次额外的时间。
因此,change
i由于变量
rev
的原因,您将获得该输出。在语句
var rev=str[i]中使用变量之前,首先声明变量的值
undefined
+rev;
。在
之前为
循环声明
var rev='
。另一点是循环执行了一次额外的时间。 所以改变
i
//在条件语句中使用charAt()方法
功能反转(str){
如果(str==“”)
返回“”;
其他的
返回反向(str.substr(1))+str.charAt(0);
}
警报(倒车(“峡谷”);
//在条件语句中使用charAt()方法
功能反转(str){
如果(str==“”)
返回“”;
其他的
返回反向(str.substr(1))+str.charAt(0);
}

警报(反向(“Canyon”);
此解释不正确,因为用var声明的变量被提升到函数顶部scope@Ferrybig,我理解变量是被提升的。你说的“到函数范围的顶部”是什么意思?好的,实际上是在幕后移动(提升)
var rev
从循环外部到函数范围顶部(函数的最开始),但由于
rev
中没有值,因此它是
未定义的
。因此实际的解决方法是将空字符串分配到
rev
。更新的答案。这种解释是不正确的,因为用var声明的变量被提升到函数的顶部scope@Ferrybig,我理解变量被提升。你说的是什么意思“到功能范围的顶部”?很好,实际上是在引擎盖下移动(提升)
var rev
到功能范围的顶部(功能的最开始),但由于
rev
中没有值,因此它是
未定义的
。因此实际的解决方法是将空字符串分配到
rev
。更新了答案。您使用哪种浏览器?我检查了ff、chrome、opera和edge,并得到未定义的,而不是未声明的。您使用哪种浏览器?我检查了ff、chrome、opera和edge,并得到未定义的,而不是未申报的