【问题标题】:Can't assign value to out of scope variable inside image.onload()无法为 image.onload() 内的超出范围的变量赋值
【发布时间】:2016-05-20 18:12:45
【问题描述】:

这就是我所拥有的:

var test = '';
var img = new Image();
img.src = 'https://blahblah';
img.onload = function () {
    test = 'Sam';
}

当我console.log(test) 时,它什么也没显示。如何在onload 中为test 赋值?

【问题讨论】:

  • 您是否将img 附加到DOM?您需要在onload 触发之前执行此操作。
  • @SimianAngel,是的,我做到了,它就在那里。
  • 嗯...一旦我将 img 附加到 DOM,我就会在这个 CodePen 中显示它:codepen.io/anon/pen/pyXQbv?editors=1111
  • @SimianAngel - 我认为提问者想要在函数内修改函数范围之外的变量,您的代码笔没有反映这一点。
  • @SeattleAls - 您的目标是修改测试变量,但该变量不会存在于函数的范围内。一个廉价(和肮脏)的修复方法是让 test 成为一个全局变量。

标签: jquery image scope onload


【解决方案1】:

查看这个 jsFiddle:https://jsfiddle.net/y7Lnp6q1/1/

这取决于您在哪里执行 console.log。在以下代码中查看我的 cmets:

var test = "";
var img = new Image();
img.src = 'https://developers.google.com/search/docs/data-types/images/recipes01.png';
img.onload = function () {
    test = "Sam";
    console.log("test = " + test); // Will output "test = Sam"
}
console.log("test = " + test); // Will output "test = ", because onload is not yet triggered by this time.

【讨论】:

  • 我知道。那就是问题所在。我需要它是'Sam' 外面img.onload
  • @SeattleAls 它将是,一旦onload 运行。
  • @MikeMcCaughan 它不会,变量 test 的范围(在函数外部声明)不会扩展到函数中。 OP 可能需要重新考虑他们的设计。
  • 这与范围无关。是时候了。请参阅我更新的 JsFiddle。该值设置正确,但仅在调用 onload 之后:jsfiddle.net/y7Lnp6q1/2
猜你喜欢
  • 2021-10-04
  • 2016-09-16
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 2015-04-21
  • 2018-03-13
相关资源
最近更新 更多