【问题标题】:Simple JS with deffining functions具有定义函数的简单 JS
【发布时间】:2012-11-13 19:03:23
【问题描述】:

我正在使用网站提示创建一个简单的问题,但我遇到了问题。

我收到此脚本的两个错误,首先是“问题未定义”,

其次是"missing ) after argument list"就行了,我的第一个提示有什么想法吗?

<script>
var a = Math.floor((Math.random()*10)+1);
var b = Math.floor((Math.random()*10)+1);
var c = Math.floor((Math.random()*10)+1);

var wrong = 0;

function question()
{   
    for(x=1; x>10; x++)
    {
        prompt("Does" b"+"c " = ");
        if(prompt.input == b + c)
        {
            question();
        }else{
            wrong++;
        }

        if(x==10)
        {
            alert("well you were wrong " + wrong" times");
        }
    }
}
</script>

【问题讨论】:

  • 您似乎在几个地方跳过了连接运算符
  • jshint.com 开始。您现在可以取消所有警告,您将获得大量反馈,仅包含错误。
  • 另外,prompt.input?你是怎么得到这个代码的?只是你最好的猜测?

标签: javascript function arguments semantics


【解决方案1】:

您在

的参数中缺少所有 +
prompt("Does" b"+"c " = ");

你必须使用+ 来连接字符串:

prompt("Does " + b + "+" + c + " = ");

同样的+ 不见了:

alert("well you were wrong " + wrong" times");

用途:

alert("well you were wrong " + wrong + " times");

此外,您正在从其内部调用question。这不会导致语法错误,但在您的情况下几乎不需要。


另外,prompt.input 也不起作用。它总是未定义的。使用提示调用的返回值:

var response = prompt( ... );
if(response == b+c){
  ...

此外,您只需初始化一次随机变量。也许您希望在每个循环中都有一个新的对(除非递归是为此而设计的)。感谢@Asad 的关注。

【讨论】:

  • 好电话,我错过了 ;)
【解决方案2】:

您似乎在几个地方跳过了连接运算符。正确的版本如下所示:

prompt("Does " + b + "+" + c + " = ");

再来一次:

alert("well you were wrong " + wrong + " times");

另外:

  1. 您的随机数需要在开始时再次随机化 循环
  2. question 不需要递归(你已经在使用循环了)
  3. 用户错误次数的警报需要在循环之外发生

这是一个更正的版本:

var a = Math.floor((Math.random()*10)+1);
var b = Math.floor((Math.random()*10)+1);
var c = Math.floor((Math.random()*10)+1);

var wrong = 0;

function question()
{   
    for(x=1; x>10; x++)
    {
        b = Math.floor((Math.random()*10)+1);
        c = Math.floor((Math.random()*10)+1);
        prompt("Does " + b + "+" + c + " = ");
        if(prompt.input != b + c)
            wrong++;        
    }

    alert("well you were wrong " + wrong + " times");
}

【讨论】:

    【解决方案3】:
    var f1 = alert("well you were wrong " + wrong + " times");
    

    alert 不返回值。

    缺少字符串连接:

    "Does" b"+"c " = "
    "Does"+ b + "+" + c + " = "
    

    (我建议检查你所有的字符串)

    此外,通过在其中包含循环的递归,您正在生成一个无限循环: (稍微简化)

    function question(){
    
        for(x=1; x>10; x++){
            question();
        }
    }
    

    您呼叫question(); 10 次,每次呼叫question();

    【讨论】:

    • 对于可能阅读此内容的其他用户来说,它仍然是有效的反馈。不是投反对票的理由。
    • 我正在尝试造成循环 10 次
    • @Asad 已经写了很多应该如何做的文章。我可以自己写,但几乎是一样的。
    【解决方案4】:

    首先,字符串连接存在错误。应该是这样的

    prompt("Does" +b+c+" = ");
    alert("well you were wrong " + wrong+" times");
    

    其次,您经常使用函数question(); 而没有升级值,这会创建一个循环

    【讨论】:

    • 我试图造成一个循环 10 次,但由于随机数,每次都会有所不同。
    【解决方案5】:

    question is not defined 表示您的函数question 在浏览器实际读取之前被调用。

    确保仅在 window.ready 事件触发后才执行主 JS 代码。

    window.onready = function(){
        //Here your starting code goes
    }
    

    【讨论】:

    • 无需等待。问题是从自身内部调用的,因此在调用时已经定义。
    • @JanDvorak 是的,第一次叫它什么?
    • 很高兴知道这一点。不过,您无需等待页面加载。
    • @JanDvorak 等待资源加载只是一个好习惯。 window.load 仅表示已接收并预处理所有文本文件。所有图像仍在加载同时工作的 JS 代码。在这种情况下,更容易预测会发生什么。
    猜你喜欢
    • 2019-08-20
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    相关资源
    最近更新 更多