从 Javascript 函数返回一个变量

Return a variable from a Javascript function

本文关键字:一个 变量 Javascript 函数 返回      更新时间:2023-09-26

如何访问imgWidth的值?这给了我undefined.

somejQueryMethod(function() { 
    var imgWidth;
    $("<img/>").attr(
        "src", 
        $("#SomeImgSelector").attr("src")
    ).load(function() {
        imgWidth = this.width;
    });
    // use imgWidth here
    // imgWidth is undefined here
});

背景信息:从这个SO问题中,我假设由于imgWidth是在load()方法之外定义的, 它将始终在load()之外可用。这让我 想知道为什么在那里定义imageWidth而不是在load()中?

您不能在那里使用该值,因为它尚不存在。load 命令中的回调函数在加载内容后运行,这在使用 load 命令的函数结束后发生。

将需要值的代码放在 load 命令的回调函数中:

...somejQueryMethod(
    function() { 
        var imgWidth;
        $("<img/>").attr("src", $("#SomeImgSelector").attr("src")).load( function() {
          imgWidth = this.width;
          // use imgWidth here
        } );
    }
);

你的问题对我来说没有多大意义。您不能在那里使用它,因为它还没有值 - 当它被定义时,你应该在负载处理程序函数内或之后使用它。

编辑:补充一下,花点时间想想你在那里做什么。当您更改 src 属性时,您告诉它从某个 url 加载图像。然后,附加要触发的加载事件(当它完成加载时)以捕获加载图像的宽度。现在,当然,在代码完成加载图像之前,您不能使用该值。在这里,您使用的是异步加载,这实际上意味着您的代码将被处理到最后,并且加载将"同时"发生,因此它不会等待图像加载完成。如果需要,您还可以更改代码,使其实际上等待其完成,或者您可以按照其他人所演示的那样,在加载处理程序中调整宽度。

load 函数是异步的,这意味着您需要在回调函数中提供所有功能。

somejQueryMethod(function() {         
    $("<img/>").attr(
        "src", 
        $("#SomeImgSelector").attr("src")
    ).load(function() {
        var imgWidth = this.width;
        // use imgWidth here
    });
});