Javascript 从新对象定义内部访问变量
我正在使用prototypejs。代码是:Javascript 从新对象定义内部访问变量,javascript,prototypejs,Javascript,Prototypejs,我正在使用prototypejs。代码是: var someVariable; new Ajax.Request('blah.php', { method: 'post', parameters: { username: $('username').value, password: $('password').value }, onComplete: function(response) { //access someVar
var someVariable;
new Ajax.Request('blah.php', {
method: 'post',
parameters: { username: $('username').value, password: $('password').value },
onComplete: function(response) {
//access someVariable here?
}
如何从我提到的地方访问某个变量?您只需像通常一样按名称引用它。在代码中,为
onComplete
指定的函数是定义someVariable
的上下文上的闭包,因此它具有对该变量的持久引用
var someVariable;
new Ajax.Request('blah.php', {
method: 'post',
parameters: { username: $('username').value, password: $('password').value },
onComplete: function(response) {
someVariable = /* some value */;
}
有关闭包的更多信息:
请注意,当您在已返回的函数中执行此操作时,情况更是如此:
function doSomeAjax() {
var someVariable;
new Ajax.Request('blah.php', {
method: 'post',
parameters: { username: $('username').value, password: $('password').value },
onComplete: function(response) {
someVariable = /* some value */;
}
});
}
由于ajax调用是异步的,
doSomeAjax
将在调用onComplete
函数之前返回。这很好,someVariable
仍然存在,因为仍然有一些东西(您的onComplete
函数)引用了定义它们的上下文,因此上下文保存在内存中。您只需像通常一样按名称引用它。在代码中,为onComplete
指定的函数是定义someVariable
的上下文上的闭包,因此它具有对该变量的持久引用
var someVariable;
new Ajax.Request('blah.php', {
method: 'post',
parameters: { username: $('username').value, password: $('password').value },
onComplete: function(response) {
someVariable = /* some value */;
}
有关闭包的更多信息:
请注意,当您在已返回的函数中执行此操作时,情况更是如此:
function doSomeAjax() {
var someVariable;
new Ajax.Request('blah.php', {
method: 'post',
parameters: { username: $('username').value, password: $('password').value },
onComplete: function(response) {
someVariable = /* some value */;
}
});
}
由于ajax调用是异步的,
doSomeAjax
将在调用onComplete
函数之前返回。这很好,someVariable
仍然存在,因为仍然有一些东西(您的onComplete
函数)引用了定义它们的上下文,因此上下文保存在内存中。只要您的变量someVariable
处于相同的级别或上下文中(在闭包或函数内)您可以在onComplete
回调中的匿名函数内使用。不确定您计划如何使用它,但您可以在收到响应时为其赋值或将其用作另一个变量的赋值。只要您的变量someVariable
处于相同的级别或上下文中(在闭包或函数内)您只需在onComplete
回调中的匿名函数内使用即可。不确定您计划如何使用它,但您可以在收到响应时为其赋值或将其用作另一个变量的赋值