如何在javascript中获取函数内部的变量

如何在javascript中获取函数内部的变量,javascript,image,function,width,Javascript,Image,Function,Width,我试图使用下面的代码获得图像的宽度,但问题是,我无法检索函数中的变量 var get_image_h_w = new Image(); var width; get_image_h_w.onload = function() { width = get_image_h_w.width; } get_im

我试图使用下面的代码获得图像的宽度,但问题是,我无法检索函数中的变量

var get_image_h_w = new Image();
var width;
                        get_image_h_w.onload = function() {
                          width = get_image_h_w.width;
                        }
                        get_image_h_w.src = img_link_url;

alert(width);

.onload
处理程序将在运行
警报(宽度)
后的一段时间内执行。它将在运行时设置变量
width
,但知道何时发生的唯一可靠方法是将要使用该
width
值的代码放入
onload
处理程序,或从
onload
处理程序调用它。这是一个异步回调的示例,这意味着当事件发生时,它与代码的其余部分“不同步”

var get_image_h_w = new Image();
get_image_h_w.onload = function() {
    alert(this.width);
    // you can call some code here that wants to use this width
    // and pass the width to that function
    callYourFunction(this.width);
}
get_image_h_w.src = img_link_url;

注意:我还切换到使用
this.width
,其中
this
是创建
onload
事件的对象。这与您使用它的方式没有什么不同,但它更通用,特别是当您希望同一事件处理程序可用于多个对象时,因此使用它是一种很好的做法。

变量
宽度
很可能是,调用alert时永远不会保持图像宽度,因为onload事件在触发之前不会停止执行。您只是将一个函数分配给onload事件。onload事件不会立即触发。相反,它会在映像完成加载时激发,这可能是在执行到达您的警报调用之后

尝试在onload事件中放置一个回调函数,该函数将使用新设置的变量

get_image_h_w.onload = function() {
    width = get_image_h_w.width;
    finishedLoading();
}

var finishedLoading = function () {
   var w = width; // width will be set here
}

您能确保调用了onload函数吗?