列表范围javascript的问题

列表范围javascript的问题,javascript,Javascript,我正在尝试创建一个函数,该函数尝试访问列表中的第一项以创建konami代码网站。定义列表,然后定义用于编辑列表的函数。这是密码 <html><body> <script> var keys = [38,38,40,40,37,39,37,39,66,65]; function keyhandler (e) { e = e || event; console.log(e.keyCode); var key = keys[0]; i

我正在尝试创建一个函数,该函数尝试访问列表中的第一项以创建konami代码网站。定义列表,然后定义用于编辑列表的函数。这是密码

<html><body>
<script>
var keys = [38,38,40,40,37,39,37,39,66,65];
function keyhandler (e) {
    e = e || event;
    console.log(e.keyCode);
    var key = keys[0];
    if (key == e.keyCode) {
        console.log("correct key");
        if (keys.length == 1){
            console.log("konami");
        } else {
            var keys = keys[1,keys.length];
        }
    }
    else {
        var keys = [38,38,40,40,37,39,37,39,66,65];
    }
}
document.onkeydown = keyhandler;
</script>
</body></html>

var键=[38,38,40,40,37,39,37,39,66,65];
函数keyhandler(e){
e=e | |事件;
console.log(例如keyCode);
var key=key[0];
if(key==e.keyCode){
控制台日志(“正确的键”);
如果(keys.length==1){
console.log(“konami”);
}否则{
var keys=keys[1,keys.length];
}
}
否则{
var键=[38,38,40,40,37,39,37,39,66,65];
}
}
document.onkeydown=keyhandler;
当我通过按键触发该功能时,会出现以下错误: 未捕获的TypeError:无法读取未定义的属性“0”。错误是由var key=keys[0]行引起的

您在函数中创建了一个新的(局部范围的)
keys
变量,它屏蔽了包含您试图读取的数组的变量。记住:
var
语句被挂起

为这两个变量使用不同的名称(或者如果它们应该是同一个变量,则从内部变量中删除
var
语句)



注意:在JavaScript中,
[1,keys.length]
只是一个变量,而不是一个。

您正在初始化函数内部另一个名为
keys
的变量(
var-keys=keys[1,keys.length]
)。这会影响外部变量。删除
var
关键字以访问正确的变量

另外,我相信您希望从列表中删除第一个元素。为此,请使用


这将直接修改数组,因此您无需将结果分配给任何对象。

正如昆廷所说,函数中正在发生提升。 这里的其他海报也这样说,您正在函数中定义一个新的局部变量

让我用Javascript解释代码时发生的事件来演示您的函数:

var keys = [38,38,40,40,37,39,37,39,66,65];
function keyhandler (e) {
    // Javascript defines all the local variables at top.
    // This is what hoisting is
    var key;
    var keys;
    e = e || event;
    console.log(e.keyCode);
    // at this point, local variable keys isn't initialized,
    // that's why you are getting the undefined error.
    key = keys[0];
    if (key == e.keyCode) {
        console.log("correct key");
        if (keys.length == 1){
            console.log("konami");
        } else {
            // you are referencing a local variable here
            keys = keys[1,keys.length];
        }
    }
    else {
        // you are referencing a local variable here
        keys = [38,38,40,40,37,39,37,39,66,65];
    }
}
document.onkeydown = keyhandler;
正如其他海报所提到的,简单地从键中删除var可能会解决您的问题,如果这是您的意图,但我认为了解Javascript在这种情况下的技术功能是很重要的。

问题在于

var key = keys[0]; 
不是需要替换的注释中提到的javascript表达式

var key = keys.slice(0,2);

var-keys=keys[1,keys.length]
不是正确的javascript,您希望它做什么?它看起来像是从数组中获取一系列值。也许slice方法是在这里使用的?@juvian这是一个有效的JavaScript语句。这里有一个逻辑问题。问题是第7行如何更改it@Vohuman是的,这意味着对数组进行切片是不正确的,看起来有点像Python。这行代码需要从列表中删除第一项,但是这段代码没有运行,因为它在定义时暂停key@AlexanderRD-是的,出于我所描述的原因。感谢您回答key.shift,但如何将key设置为第一项而不导致未捕获类型错误,我在var key=keys[0]处出错@Alexanderd如我所说,在
var key
之前删除
var
var key = keys[0]; 
var key = keys.slice(0,2);