有人看到这个有什么不对吗

Can anyone see anything wrong with this?

本文关键字:什么      更新时间:2023-09-26

我是web编程的新手,所以这里的问题很可能非常明显,但。。。

Chromes DevTools给了我两个关于这个代码的错误。意外的输入结束和未定义的函数错误。在我看来,这两个问题都是由语法错误引起的,但如果存在,我就找不到了。有人能看到语法错误吗?还是我做错了什么?

<!DOCTYPE html>
<html>
<body>
<p1 id='txt'></p1>
<button onclick='main();'>Run</button>
<script>
function main(){
    alert('running script');
    document.getElementById('txt').innerHTML=permute([1,2,3]).toString();
}
function permute(list){
    alert('Running permute on '+list.toStriing());
    if(list.length == 1){return [list];}
    if(list.length > 1){
        var perms = [];
        for(var i=0; i<list.length; i++){
            var first = list[i];
            var others = list.slice(0,i).concat(list.slice(i+1,list.length));
            var subPerms = permute(others);
            for(var x=0; x<subPerms; x++){
                perms.push([list].concat(subPerms[x]));
            }
        return perms;
    }
}
</script>
</body>
</html>
  1. 在外部for循环的末尾(就在return perms;之前)缺少一个}

  2. toStriing不是函数;)

当缺少右括号或大括号时,几乎总是会出现"输入意外结束"错误。解析程序将继续尝试读取超过文件末尾的内容,因为作用域尚未关闭。

您的代码就是这样:

function permute()不包含右大括号。

解决方案:</script> 之前添加单个}

一个好的文本编辑器应该突出显示匹配的括号和大括号

当您在Javascript中收到此消息时,您应该检查控制台,它应该有一条带箭头的错误消息,您可以展开它。然后,单击堆栈跟踪,它应该会给出错误发生的行号你丢失了一个外括号

for(var i=0; i<list.length; i++){
        var first = list[i];
        var others = list.slice(0,i).concat(list.slice(i+1,list.length));
        var subPerms = permute(others);
        for(var x=0; x<subPerms; x++) 
           perms.push([list].concat(subPerms[x]));
        }
        return perms;
 }//you were missing a bracket here

此外,您还有一个list.toStriing()。我猜这只是一个打字错误

你的固定代码是

<!DOCTYPE html>
<html>
<body>
<p1 id='txt'></p1>
<button onclick='main();'>Run</button>
<script>
function main(){
    alert('running script');
    document.getElementById('txt').innerHTML=permute([1,2,3]).toString();
}
function permute(list){
    alert('Running permute on '+list.toString());
    if(list.length == 1){return [list];}
    if(list.length > 1){
        var perms = [];
        for(var i=0; i<list.length; i++){
            var first = list[i];
            var others = list.slice(0,i).concat(list.slice(i+1,list.length));
            var subPerms = permute(others);
            for(var x=0; x<subPerms; x++){
                perms.push([list].concat(subPerms[x]));
            }
        }
        return perms;
    }
}
</script>
</body>
</html>

您的代码应该如下所示:

function main(){
    alert('running script');
    document.getElementById('txt').innerHTML=permute([1,2,3]).toString();
}
function permute(list) {
    alert('Running permute on ' + list.toStriing());
    if (list.length == 1) { return [list]; }
    if (list.length > 1) {
        var perms = [];
        for (var i = 0; i < list.length; i++) {
            var first = list[i];
            var others = list.slice(0, i).concat(list.slice(i + 1, list.length));
            var subPerms = permute(others);
            for (var x = 0; x < subPerms; x++) {
                perms.push([list].concat(subPerms[x]));
            }
            return perms;
        }
    }
}

问题是置换函数缺少右括号。使用像VS2013这样的好编辑器进行语法校对是避免此类错误的简单方法。

toString拼写错误。另外,在置换函数的末尾缺少一个大括号。在编写代码之前,请始终先关闭大括号,以确保块正确关闭:)

函数permute(list){…}的右大括号丢失,并且缺少toStriing而不是toString