Javascript变量似乎不会设置
Javascript variable seemingly won't set
在这个简化的小提琴中,我试图重新设置"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/
相关文章:
- 如何在定义js文件后为外部javascript文件设置变量
- 在 Jquery/Javascript 中使用多个 OR (||) 运算符时如何设置变量
- 在值内设置变量
- 在javascript函数中设置变量
- 设置变量时破坏游戏代码
- 未设置变量的赋值| jQuery的作用是什么
- 在可编辑行内设置变量
- 在不中断形式帖子的情况下在角度中设置变量
- MongoDB MonkAPI根据数据库请求之外可用的查找结果设置变量
- text方法中的javascript设置变量
- 如何为JavaScript函数设置变量以嵌入视频
- 使用jQuery和PHP加载区域设置变量
- 包括外部JS文件和设置变量
- 在jQuery File upload插件中设置变量上传路径
- 设置变量函数不起作用
- Session.get未在Meteor.js中设置变量
- 为cytoscape.js mapData设置变量限制
- 如何在脚本标记中设置变量
- 使用控制器在conditional.js.erb文件中设置变量
- 如何从控制台动态设置变量