Javascript变量似乎不会设置

时间:2012-08-14 20:17:11

标签: javascript

在这个简化的小提琴中,我试图重新设置“令牌”的值,以便在后续的表单提交中使用,但是尽管设置了值,下一次传递,'token'仍然设置为初始值QWERTY的价值。

var token = '';

function pollServer(token) {

    alert("Calling with token: " + token);

    alert("OLD: " + token);
    token = "ASDFG"; // new token
    alert("NEW: " + token);

}

function onsubmit_action() {

    alert("A: " + token);

    if (token === '') {
        // set the initial token
        token = 'QWERTY';
    }

    alert("B: " + token);
    pollServer(token);
    event.preventDefault();

}​

DEMO:http://jsfiddle.net/tUtRH/

警报应该:

<submit form>
A:
B: QWERTY
Calling with token: QWERTY
OLD: QWERTY
NEW: ASDFG

<submit form>

A: ASDFG

相反,在第二次表单提交后,我得到:

A: QWERTY

脸上的任何耳光或倾倒在我头上的冷水都会非常感激。 (显然,这段代码已被删除以涵盖最小的情况,这实际上是一堆轮询/ AJAX调用来获取/设置令牌等。)

4 个答案:

答案 0 :(得分:3)

您的问题是pollServer的参数称为token

正在发生的事情是,在pollServer内设置本地token,而不是全局。{/ p>

答案 1 :(得分:3)

Javascript是功能范围。通过将令牌参数传递给函数pollServer,您将创建一个名为token的局部变量,而不是全局变量。

这是关于SO的最常见的JS问题类型之一。那和异步变量时序分配。

答案 2 :(得分:2)

您有一个全局变量token,它被函数参数token屏蔽,因此函数内部的赋值在函数外部没有任何影响。

答案 3 :(得分:1)

JavaScript中的原始变量按值[1]传递。您应该使任何函数(例如您的pollServer())函数不仅接受参数,而且返回修改后的值,并使调用者使用函数的返回值。更像是:

function pollServer(token) {
   token = 'new value';
   return token;
}

function something_else() {
   var token = 'old value';
   token = pollServer(token);
   if (token != 'old value) {
       alert('Success!');
   }
}

[1] http://snook.ca/archives/javascript/javascript_pass/