JavaScript(JQuery)全局变量不工作?

JavaScript(JQuery)全局变量不工作?,javascript,jquery,global,Javascript,Jquery,Global,为什么这不起作用?我认为,如果我将“prw”和“prh”变量设置在计算它们的函数之外,但在作用域函数内,它会起作用。但事实并非如此!我做错了什么 $(document).ready(function() { var wrap = document.getElementById('imdiv'); var img = wrap.getElementsByTagName('img')[0]; var prw;

为什么这不起作用?我认为,如果我将“prw”和“prh”变量设置在计算它们的函数之外,但在作用域函数内,它会起作用。但事实并非如此!我做错了什么

    $(document).ready(function() {

            var wrap = document.getElementById('imdiv');
            var img = wrap.getElementsByTagName('img')[0];

            var prw;
            var prh;

            $("<img/>")
                .attr("src", $(img)
                .attr("src"))
                .load(function() {
                    prw = this.width;
                    prh = this.height;
            });

            console.log('prw ~ ', prw);
            console.log('prh ~ ', prh);
    });
$(文档).ready(函数(){
var wrap=document.getElementById('imdiv');
var img=wrap.getElementsByTagName('img')[0];
var-prw;
var-prh;

$(“您再次在内部声明prw和prh $(文件)。准备好了吗 因此,在该块中,您创建了两个与全局变量同名的局部变量,因此,由于JavaScript范围规则,您访问的是局部变量,而不是全局变量

考虑下一个例子:

var x = 3;

function f()
{
  var x;
  x = 2;
  alert(x);
}

f();

alert(x);

输出将是2和3。

问题与全局变量无关。唯一的问题是在设置变量值之前必须打印变量值。一旦图像加载到dom中,Load函数将被调用

这将首先执行。仍然没有定义值

console.log('prw ~ ', prw);
console.log('prh ~ ', prh);
之后,这将得到执行

prw = this.width;
prh = this.height;
如果要查看正确的值,应在设置后立即打印这些值

$("<img/>")
    .attr("src", $(img)
    .attr("src"))
      .load(function() {
            prw = this.width;
            prh = this.height;
            console.log('prw ~ ', prw);
            console.log('prh ~ ', prh);
       });

$(“执行以下操作:

var prw;
var prh;

$(document).ready(function() {

var wrap = document.getElementById('imdiv');
var img = wrap.getElementsByTagName('img')[0];

$("<img/>")
.attr("src", $(img)
.attr("src"))
.load(function() {
    prw = this.width;
    prh = this.height;
    return doStuff()
})
});

function doStuff(){
    console.log('prw ~ ', prw);
    console.log('prh ~ ', prh);
}
var-prw;
var-prh;
$(文档).ready(函数(){
var wrap=document.getElementById('imdiv');
var img=wrap.getElementsByTagName('img')[0];

$(“这与作用域无关。
.load()
是异步的。您需要在传入的函数中完成所有的工作。这是一些看起来很怪的代码,您做错了什么。好吧,但是我如何使它全局化呢?它是全局性的并不重要,在您将值设置为variables@RobH你说得对。我错过了这一次。那么我该如何让内线变宽。同意d(函数()全局然后?移动“var prw;var prh;"行到代码的第一行。这不是问题所在。变量的作用域很好。您不能从异步调用返回函数,但它会在加载完成后调用函数时以某种方式工作,但这没有多大意义。好的,但我想在其他地方使用这些值。这就是为什么我希望将它们作为全局值:p当您必须等待图像加载并正确设置值时:-)