在Ajax回调中,局部变量是否仍在作用域中
Will local variables still be in scope on an Ajax call back?
我想在激活ajax回调函数后调用一个内部函数。因为有一个延迟,我想知道当调用它时,我的局部变量是否仍然正确,尤其是回调函数使用的.response_element。
当ajax status == 200
时启动回调功能
var ControlSignIn = function( )
{
this.form_element = document.getElementById( 'signin' ),
this.response_element = document.getElementById( 'signin_response' ),
this.text_object = new Text( this.form_element ),
this.message_object = new Message( this.response_element );
};
ControlSignIn.interface = function()
{
new ControlSignIn().invoke();
};
ControlSignIn.prototype.invoke = function( )
{
if( CONSTANT.VALIDATE_ON === 1 )
{
if( !this.text_object.checkEmpty() )
{
this.message_object.display( 'empty' );
return false;
}
if( !this.text_object.checkPattern( 'email' ) )
{
this.message_object.display( 'email' );
return false;
}
if( !this.text_object.checkPattern( 'pass' ) )
{
this.message_object.display( 'pass' );
return false;
}
}
/* new internal call_back */
AjaxNew.use( ajaxSerialize( this.form_element ) + '&ajax_type=ControlSignIn', ControlSignIn.invoke.callBack );
function callBack( server_response_text )
{
ajaxType( server_response_text, this.response_element, 'respond' );
}
/* Removed
Ajax.repeatUse( ajaxSerialize( this.form_element ) + '&ajax_type=ControlSignIn', ajaxTypeRespond, this.response_element );
*/
};
解决方案:
AjaxNew.use( ajaxSerialize( this.form_element ) + '&ajax_type=ControlSignIn', ControlSignIn.invoke.callBack );
var response_element = this.response_element;
function callBack( server_response_text )
{
ajaxType( server_response_text, response_element, 'respond' );
}
不,不会。即使属性可能完好无损,this
也不会指向对象。
将值复制到局部变量,并使用函数文字,然后局部变量将被捕获在函数的闭包中,并保持完整和可访问:
var element = this.response_element;
AjaxNew.use(
ajaxSerialize(this.form_element) + '&ajax_type=ControlSignIn',
function(server_response_text) {
ajaxType(server_response_text, element, 'respond');
});
答案是肯定的和否定的。是的,局部变量仍然存在,但this
引用总是在每次函数调用时重置。因此,回调将具有自己的this
值。
解决方案是利用答案中的"是"部分,并将this
引用保存在另一个变量中。然后在回调中使用该变量(而不是this
)。
也就是说,你的代码结构让我有点困惑,我无法准确地说出你的"回调"应该如何工作;也就是说,它引用了this
,但我看不出它希望如何设置它。
相关文章:
- 当提供函数名称时,检查函数是否存在于同一作用域中
- 作用域问题-此函数是否形成闭包-JavaScript
- 通过字符串形式的名称检查变量是否存在于本地作用域内
- Javascript-确定对象中是否有任何作用域引用
- 从对象中调用的函数是否可以访问该对象的作用域
- q 从 .then 函数分配给更高级别的作用域变量是否存在任何陷阱
- eval() 的执行是否仅在调用它的函数中已知(作用域)
- javascript是否实现词法作用域
- 当子指令具有独立作用域时,是否可以从父指令控制器调用函数
- 在Ajax回调中,局部变量是否仍在作用域中
- IE是否为每个脚本标记创建新的作用域
- 是否可以链接指令作用域(例如obj.prop)
- 检查Angular JS中是否修改了复杂的作用域变量
- ruby中的作用域是否被认为像javascript一样具有功能,或者块作用域
- 不确定我是否完全理解Javascript中的变量作用域
- 在JS“if”语句参数中,是否有用于声明本地作用域变量的简明语法
- 回调函数是否在javascript中创建了一个新的作用域?
- Javascript -是否有可能在函数定义后调用它自己,然后在作用域的其他地方作为函数被引用?
- 当没有返回引用时,作用域是否终止
- Javascript函数作用域-是否使用console.log