【问题标题】:Setting a global scope variable inside a function在函数内设置全局范围变量
【发布时间】:2015-03-22 10:27:38
【问题描述】:

我正在尝试根据元素的高度设置动画触发器。该项目是用 AngularJS 构建的,但我遇到的问题似乎很奇怪。我试图在图像加载时设置一个 imgH 变量。在我的 onload 函数中,日志返回正确的图像高度并设置全局变量 imgH。在我的 onload 函数之后,控制台日志命令返回 imgH = undefined

var imgH;
        $('.step-image').on('load',function(){
            imgH = $(this).height();
            console.log(imgH);
        });
console.log(imgH);

【问题讨论】:

  • 欢迎来到异步世界! load 事件发生在 代码末尾的 console.log 之后,因此此时未设置 imgH 值。
  • “你打电话要披萨,然后想在披萨送到之前吃掉它”:)
  • @TrueBlueAussie 我打算使用它:D
  • @Rory McCrossan:很惊讶你没有快捷键:)
  • @T.J.克劳德:不,不是我的(因此引用)。上周左右我在 SO 上看到了它。它很好地传达了这个想法,以至于我开始自己用它来解释这个概念:)

标签: javascript jquery angularjs scope onload


【解决方案1】:

变量正在被设置,只是当你在最后执行console.log时它还没有设置。

这是您的代码运行的顺序:

  1. var imgH; - 创建初始值为 undefined 的全局变量。
  2. $('.step-image').on('load', function ...) - 设置处理程序,不(还)调用函数。
  3. console.log(imgH);(在底部)- 显示 undefined,因为尚未为 imgH 赋值。
  4. 稍后,当图像加载时,将调用处理函数并设置imgH
  5. console.log(imgH);(在处理函数内部)- 显示值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2020-10-02
    • 2023-03-24
    相关资源
    最近更新 更多