Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从新对象定义内部访问变量_Javascript_Prototypejs - Fatal编程技术网

Javascript 从新对象定义内部访问变量

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

我正在使用prototypejs。代码是:

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
回调中的匿名函数内使用即可。不确定您计划如何使用它,但您可以在收到响应时为其赋值或将其用作另一个变量的赋值