-2

如果我这样做:

test();

function test(){
  $('img').load(function(){
  alert(this.width);
 })
}

以正确的图像宽度显示警报。

但是,当我这样做时:

alert(test());

function test(){
  $('img').load(function(){
  return this.width;
 })
}

...警报显示“未定义”

这两个示例都是从 $(document).ready 函数中运行的。我认为这与 load() 有关。但我不知道为什么 alert 有效,但 return 无效。

谢谢!

4

3 回答 3

3

您的test函数总是返回undefined,因为它没有return语句。

return在你的代码中属于匿名回调函数。

于 2013-09-30T21:23:41.243 回答
0

return图像是异步加载的,所以在这种情况下你最好忘记。(请参阅如何从异步调用返回响应?)。

如果您必须在加载后处理图像的尺寸,请从回调中执行:

function test(){
    $('img').load(function(){
        // If you need to use this.width or this.height, do it from here
    });
}

您还可以通过回调进行测试:

function test(callback){
    $('img').load(callback);
}
function doSomething() {
    alert(this.width);
}
test(doSomething);
于 2013-09-30T21:49:53.750 回答
0

我还不是 JS 忍者,但我觉得这与范围有关。我怀疑这两种情况下的 this 关键字都指向不同的对象。

final:在第二个示例中,在调用 alert 的那一刻,没有什么可以返回它以显示任何内容。这是因为返回是异步定义的;只要图像完成加载,它就会返回。

于 2013-09-30T21:39:39.970 回答