虽然控制台中未定义,但setInterval中的javascript变量在警报框中显示其值
javascript代码段:虽然控制台中未定义,但setInterval中的javascript变量在警报框中显示其值,javascript,jquery,Javascript,Jquery,javascript代码段: <script type="text/javascript"> $(document).ready(function() { setInterval(function() { $.getJSON('notif.php', function(data) { my_var = '123'; }); alert("my var =" + my_var); }, 2000)
<script type="text/javascript">
$(document).ready(function() {
setInterval(function() {
$.getJSON('notif.php', function(data) {
my_var = '123';
});
alert("my var =" + my_var);
}, 2000);
});
</script>
$(文档).ready(函数(){
setInterval(函数(){
$.getJSON('notif.php',函数(数据){
my_var='123';
});
警报(“my var=“+my_var”);
}, 2000);
});
在chrome和FF控制台中,my_var显示为未定义,但其值显示在alertbox上。如果未定义,那么其val是如何定义的
解释是什么?变量范围是您要寻找的主题 变量my_var只存在于ajaxsuccess调用的闭包范围内 如果您想在更高的级别上定义my_var,如下所示:
$(document).ready(function(){
var my_var;
...
您可以在控制台中看到它。Javascript变量声明:
var foo; //sets foo to undefined
console.log(foo) //-> undefined
foo = "bar" //sets foo's value to "bar"
console.log(foo) //-> "bar"
var foo = "bar"; //sets foo to undefined initially, then changes it's value to "bar"
console.log(foo) //-> "bar"
所以在您的情况下:
var foo; //sets foo to undefined
console.log(foo) //-> undefined
foo = "bar" //sets foo's value to "bar"
console.log(foo) //-> "bar"
var foo = "bar"; //sets foo to undefined initially, then changes it's value to "bar"
console.log(foo) //-> "bar"
myu-var
总是有一个undefined
的值,直到它被分配了一个不同的值。jquery中的getJSON默认是asynch
调用,因此警报(“myvar=“+myu-var”)代码>将在不等待ajax调用响应的情况下执行
将警报移动到回调函数中,如下所示
setInterval(function() {
$.getJSON('notif.php', function(data) {
my_var = '123';
alert("my var =" + my_var);
});
}, 2000);
不。。。这不是范围。没有“var”,它将是全球性的。它是关于异步任务的。我的变量只有在请求完成后才被定义。你是对的。如果ajax中有var my_var,那就是我的情况。。。