【问题标题】:var becomes NaN after incement by 10 in functionvar 在函数中增加 10 后变为 NaN
【发布时间】:2017-06-22 20:54:52
【问题描述】:
var post = 10;
function load_more(str) {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                document.getElementById("add").innerHTML = document.getElementById("add").innerHTML + xmlhttp.responseText;
            }
        };
        var post = post + 10;
        xmlhttp.open("GET", "fetch_more.php?number=" + post , true);
        xmlhttp.send();
}

当我加载网站时,我希望浏览器定义值 10 来发布并且什么也不做,直到我按下一个调用 load_more() 函数的按钮,该函数将该值增加 10 并通过 Ajax 将其传递给 PHP。

理想的行为是在网站上发布 10 个帖子,然后在每次按下按钮时再加载 10 个。

但是 PHP 只是抛出一个 MySQL 错误,并且日志显示 post var 是 NaN。

【问题讨论】:

  • var post = post + 10;中删除var
  • 该死的......它有效......谢谢!

标签: javascript


【解决方案1】:

线

var post = post + 10;

是这里的罪魁祸首。 Javascript 有一个名为hoisting 的行为,这实质上意味着您的变量总是在作用域的顶部声明。

所以在您的代码中,会发生以下情况:

var post = 10;
function load_more(str) {
    var post; // `post` is now undefined
    //...other code
    post = post + 10; // undefined + 10 evaluates to NaN
}

我希望你能看到,由于post在函数的开头被重新定义,当你在post + 10中使用post时,undefined就是undefined,这导致post = post + 10计算为@987654329 @(因为 undefined + 10 的计算结果为 NaN)。

要解决您的问题,只需从前面删除var

post = post + 10;

或:

post += 10;

【讨论】:

  • 谢谢!我这边的一个愚蠢的错误。它现在就像一个魅力!
【解决方案2】:

您正在使用关键字 var 重新初始化变量,这就是问题所在。

一个简单的post += 10; 就可以了。

【讨论】:

    【解决方案3】:

    原因是var表示声明了一个新变量。因此,您尝试创建一个新变量,并将其值设置为自身 + 10。新变量的默认值为 undefined,所以您说的是“var post = undefined + 10”,即是NaN

    【讨论】:

      【解决方案4】:

      使用post += 10post = post + 10

      在你的函数中删除var。它隐藏了在函数外部声明的变量post

      【讨论】:

        猜你喜欢
        • 2017-03-03
        • 1970-01-01
        • 2021-10-03
        • 1970-01-01
        • 1970-01-01
        • 2012-05-31
        • 2011-08-23
        • 2012-05-19
        • 2020-06-05
        相关资源
        最近更新 更多