javascript - 下面的函数闭包有什么问题?

标签 javascript

在类 Vector2 本身中,如果我使用以下内容

Vector2.prototype.aaaScalar: ( function () {

        var min = new Vector2();

        return function ( minVal) {

            min.set( minVal);

            return this.aaa( min );

        };

    } )(),

报告min没有set方法,但是Vector2中有set方法

如果改成下面的,就一切OK了

Vector2.prototype.aaaScalar: ( function () {

        var min;

        return function ( minVal) {

            if ( min === undefined ) {

                min = new Vector2();

            }

            min.set( minVal );

            return this.aaa( min );

        };

    } )(),

编辑:我检查了第一种情况,调用了 var min = new Vector2();不会返回一个完全创建的对象。

最佳答案

这里的问题不是你的关闭。就闭包而言,您的两个示例都是正确的... aaaScalar 被分配给您使用闭包中的 min 变量返回的内部函数。

两个片段之间的区别在于时间安排。在第一个示例中,var min = new Vector2() 在设置 aaaScalar 属性时执行...当 IIFE 运行时。在第二个示例中,在您实际调用分配给 aaaScalar 的函数之前,min = new Vector2() 不会运行。

我认为您会发现,在分配 aaaScalar 时,您从中获取 Vector2 的库尚未准备好,但在您实际调用 aaaScalar() 时,它已经准备好了。

关于javascript - 下面的函数闭包有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31954174/

相关文章:

javascript - 如何突出显示链接到已选菜单的元素

javascript - 使用 Javascript 从桌面应用程序导出到 Excel

javascript - 有没有办法在 gojs 面板中放置下拉菜单?

javascript - 从配置文件获取变量到浏览器

javascript - 如何获取最后 5 个元素,不包括数组中的第一个元素?

javascript - JQuery Ajax限制深度递归 "too much recursion"

javascript - Bootstrap 轮播视频

javascript - 如果一个元素有兄弟元素该怎么办

javascript - 引用数组的切片

javascript - 如何高性能地从两个数组中提取子数组?