以下函数闭包有什么问题?

时间:2015-08-12 00:31:03

标签: javascript

类Vector2本身,如果我使用以下

Vector2.prototype.aaaScalar: ( function () {

        var min = new Vector2();

        return function ( minVal) {

            min.set( minVal);

            return this.aaa( min );

        };

    } )(),

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

如果更改为以下内容,一切正常

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();没有给我一个完全创建的对象。

1 个答案:

答案 0 :(得分:1)

这里的问题不是你的关闭。关于闭包,你的两个例子都是正确的... aaaScalar被分配给你正在返回的内部函数,并在其闭包中使用min变量。

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

我认为你会发现你从中获取Vector2的库在分配aaaScalar时没有准备好,但是当你实际调用aaaScalar()时已经准备好了。