Javascript全局变量未声明问题
在上面提到的示例代码中,我试图为val变量获取一个值。我用全局范围声明了它。并添加一些控制台日志以验证值。但在函数内部,它可以毫无问题地赋值。但是函数之外的val是未声明的。为什么呢Javascript全局变量未声明问题,javascript,Javascript,在上面提到的示例代码中,我试图为val变量获取一个值。我用全局范围声明了它。并添加一些控制台日志以验证值。但在函数内部,它可以毫无问题地赋值。但是函数之外的val是未声明的。为什么呢 $.validator.addMethod("serialverify", function(){ var val; $("#serialno").keyup(function(){ serial().done(
$.validator.addMethod("serialverify", function(){
var val;
$("#serialno").keyup(function(){
serial().done(function(data){
console.log('final = ' + data);
val = data;
console.log(val);
});
}); console.log(val);
return val;
}, "Please enter valid serial code");
代码中存在一个基本问题。赋值是在回调函数中进行的,这意味着它仅在执行操作
keyup
时执行
但是,语句return val
是同步发生的
建议-
您可以将它包装成某种承诺,并在执行done
时解决它。关于-
......done( function(data) { ..... resolve(val); })
或声明
var-val
;作为外部的全局函数,addMethod
函数在代码中存在一个基本问题。赋值是在回调函数中进行的,这意味着它仅在执行操作keyup
时执行
但是,语句return val
是同步发生的
建议-
您可以将它包装成某种承诺,并在执行done
时解决它。关于-
......done( function(data) { ..... resolve(val); })
或声明
var-val
;作为外部的全局变量,addMethod
函数“我用全局作用域声明了它。”不,你没有。你的val
变量似乎不是全局的return val
将始终生成null,因为你的赋值是在一个假定为异步的回调serial().done()
“我用全局作用域声明了它。”不,您没有。您的val
变量似乎不是全局的return val
将始终生成null,因为您的赋值是在假定的异步回调serial()中进行的。done()
哦,我很笨..@Aseem非常感谢你的朋友..现在我明白了。哦,我很笨..@Aseem非常感谢你的朋友..现在我明白了。