Javascript变量似乎不会设置

Javascript variable seemingly won't set

本文关键字:设置 变量 Javascript      更新时间:2023-09-26

在这个简化的小提琴中,我试图重新设置"token"的值以在后续表单提交中使用,但尽管设置了该值,下一次传递时,"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();
}​

演示:http://jsfiddle.net/tUtRH/

警报应为:

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

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

A: QWERTY

任何耳光或冷水倾倒在我头上将不胜感激。 (显然,这段代码已被剥离以涵盖最低限度的情况,这实际上是一堆获取/设置令牌等的轮询/AJAX 调用。

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

正在发生的事情是,在pollServer内部,您正在设置本地token,而不是全局。

Javascript 是函数作用域。通过将令牌参数传递给函数pollServer您将创建一个名为 token 的局部变量,该变量将用于而不是全局变量。

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

你有一个全局变量 token ,它被函数参数 token 屏蔽,所以函数内部的赋值在函数外部没有效果。

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/