任何人都可以看到这个有什么问题?

时间:2013-12-16 02:23:53

标签: javascript html google-chrome

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

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>

6 个答案:

答案 0 :(得分:2)

  1. }圈外(for之前)

  2. ,您遗漏了return perms;
  3. toStriing不是函数;)

答案 1 :(得分:1)

当您缺少右括号或括号时,几乎总会发生“意外的输入结束”错误。解析器将继续尝试读取文件末尾,因为范围尚未关闭。

您的代码就是这种情况:

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

<强>解决方案:}

之前添加一个</script>

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

答案 2 :(得分:0)

当您在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>

答案 3 :(得分:0)

您的代码应如下所示:

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

问题是对于置换功能缺少关闭括号。使用像VS 2013这样的优秀编辑器进行语法校对是一种避免这种错误的简单方法。

答案 4 :(得分:0)

toString拼写错误。此外,在您的置换功能结束时缺少大括号。尝试在编写代码之前始终先关闭大括号,以确保正确关闭的块:)

答案 5 :(得分:0)

关闭函数permute(list){......}的大括号,并且缺少toStriing而不是toString