JavaScript(JQuery)Global Var无法正常工作?

时间:2013-07-17 07:14:49

标签: javascript jquery global

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

3 个答案:

答案 0 :(得分:2)

问题与你的全局变量无关。唯一的问题是你在为它们设置值之前打印变量的值。一旦图像加载到dom,载入函数就会调用。

首先执行此操作。仍然没有定义值

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);
       });

答案 1 :(得分: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);
}

答案 2 :(得分:-1)

你再次在里面宣布prw和prh     $(文件)。就绪 因此,在该块中,您创建两个局部变量,其名称与全局变量相同,因为JavaScript范围规则,您正在访问局部变量而不是全局变量。

考虑下一个例子:

var x = 3;

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

f();

alert(x);

输出为2和3。