0

为什么这不起作用?我认为如果我在计算它们的函数之外设置“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);
    });
4

3 回答 3

2

问题与您的全局变量无关。唯一的问题是您在为变量设置值之前打印了变量的值。一旦图像加载到 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);
       });
于 2013-07-17T07:20:59.650 回答
1

做这样的事情:

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);
}
于 2013-07-17T07:24:33.397 回答
-1

您在 $(document).ready 中再次声明 prw 和 prh ,因此在该块中您将创建两个与全局变量同名的局部变量,因此,由于 JavaScript 范围规则,您正在访问局部变量而不是全局变量。

考虑下一个例子:

var x = 3;

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

f();

alert(x);

输出将是 2 和 3。

于 2013-07-17T07:18:33.477 回答