Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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 - Fatal编程技术网

Javascript全局变量未声明问题

Javascript全局变量未声明问题,javascript,Javascript,在上面提到的示例代码中,我试图为val变量获取一个值。我用全局范围声明了它。并添加一些控制台日志以验证值。但在函数内部,它可以毫无问题地赋值。但是函数之外的val是未声明的。为什么呢 $.validator.addMethod("serialverify", function(){ var val; $("#serialno").keyup(function(){ serial().done(

在上面提到的示例代码中,我试图为val变量获取一个值。我用全局范围声明了它。并添加一些控制台日志以验证值。但在函数内部,它可以毫无问题地赋值。但是函数之外的val是未声明的。为什么呢

$.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非常感谢你的朋友..现在我明白了。