Javascript变量范围问题 - 可能很简单

时间:2014-10-05 01:40:39

标签: javascript jquery variables scope

我正在寻找这个问题的快速解决方案:

function remove() {
    var clickedbtn;
    $("button[role=remove]").click(function() {
        clickedbtn = this.id;
        alert(clickedbtn); // works, assigns correct value
    });
    alert(clickedbtn); // undefined -- why?
}

单击的变量用var声明并分配了一个值,但该值在click()函数之外不是持久的。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

当您尝试在外部函数中使用该变量时,click()尚未运行,因为用户尚未单击。

您无法预测未来的价值。


与该问题分开,您的变量名称不匹配。 (clicked不是clickedbtn

答案 1 :(得分:0)

您永远不会分配值toclicked!

所以

function remove() {
    var clicked;
    $("button[role=remove]").click(function() {
        clickedbtn = this.id;
        alert(clickedbtn);
        clicked = true; // or if you want clicked set to the id of the button then clicked = this.id;
    });
    alert(clicked);
}

答案 2 :(得分:0)

此问题与作用域无关 - 它与运行代码时的有关。异步代码是异步的,这个问题与incorrectly assigning a variable in an AJAX call相同。

请使用以下代码(我已将更改的分配更正为不存在的" clickedbtn"变量),表示何时将根据注释中的数字运行

# 1
var clicked = "initial value";
# 2
$("button[role=remove]").click(function() {
    # At some point -AFTER- 3
    clicked = this.id;
    alert(clicked);
});
# 3
alert(clicked);

这是因为点击回调仅在用户点击按钮后显示为(读取:"将来的某个时刻").click功能添加回调处理程序立即返回 以及以下代码显示警报立即执行 发生之前已为变量分配了ID可以在将来点击的元素