2013-12-16 72 views
1

我是新来的网络编程,因此很可能是这里的问题是显而易见的尴尬,但是...任何人都可以看到这个有什么不对吗?

铬合金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> 
+0

(x = 0; x

回答

2
  1. 你缺少一个}在外for环路(return perms;前右)结束

  2. toStriing不是一个函数;)

1

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

这是你的代码的情况:

function permute()不包括右括号。

解决方案: 添加一个}</script>

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

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> 
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这样的好编辑器进行语法验证是避免这种错误的简单方法。

0

toString拼写错误。另外,在排列函数结束时会丢失大括号。尝试总是右括号首先编写代码,以确保正确封闭块:)

0

右大括号的功能置换(名单){......}前为(VAR失踪toStriing代替的toString

相关问题