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