回调中的javascript变量作用域
我很好奇这怎么写得更好:回调中的javascript变量作用域,javascript,jquery,Javascript,Jquery,我很好奇这怎么写得更好: function Klass(variable) { this.variable = variable; this.callAjax = function() { $.get('/url', { }, function(json) { console.log(variable); //! <-- shows undefined }, "json"); } } 函数Klass(变量)
function Klass(variable) {
this.variable = variable;
this.callAjax = function() {
$.get('/url', { }, function(json) {
console.log(variable); //! <-- shows undefined
}, "json");
}
}
函数Klass(变量){
this.variable=变量;
this.callAjax=function(){
$.get('/url',{},函数(json){
console.log(变量);/!就是这样
function(json){console.log(_variable);}
用“_变量”形成一个闭包。
“_变量”永远保留原始值
如果以后需要更新“变量”,并且希望更新“变量”
你定义
var self = this;
并调用self.variable来获取它
这样,每次执行回调时,您都会得到更新的“变量”
完整代码:
function Klass(variable) {
var self = this;
this.variable = variable;
this.callAjax = function() {
$.get('/url', { }, function(json) {
console.log(self.variable);
}, "json");
}
}
就是这样
function(json){console.log(_variable);}
用“_变量”形成一个闭包。
“_变量”永远保留原始值
如果以后需要更新“变量”,并且希望更新“变量”
你定义
var self = this;
并调用self.variable来获取它
这样,每次执行回调时,您都会得到更新的“变量”
完整代码:
function Klass(variable) {
var self = this;
this.variable = variable;
this.callAjax = function() {
$.get('/url', { }, function(json) {
console.log(self.variable);
}, "json");
}
}
$.get(…function(){…}.bind(this))
我不明白为什么控制台.log(variable);
应该显示未定义的变量
应该引用构造函数参数。是否将未定义的传递给构造函数并稍后设置此.variable
。$.get(…function(){…}.bind(this))
我不明白为什么console.log(变量)
应该显示未定义的变量应该引用构造函数参数。您是否将未定义的传递给构造函数并在以后设置此.variable
?您也可以在构造函数中声明self
,因为callAjax
是一个特权方法(在构造函数中声明)。您的方法更好,因为它也适用于原型方法。您是对的,我想知道为什么问题中的第一个案例不起作用。它应该起作用,只是变量不会改变。您也可以在构造函数中声明self
,因为callAjax
是一个特权方法(在构造函数中声明).你的方法更好,因为它在原型方法中也有效。你是对的,我想知道为什么问题中的第一种情况不起作用。它应该起作用,只是变量不会改变。