Возврат функции из функции – один и тот же код работает по разному в разных проектах

Изучаю three.js editor. Есть такой код:

    addObject: function ( object, parent, index ) { 
        var scope = this;

        object.traverse( function ( child ) { 
            if (child.geometry !== undefined) scope.addGeometry(child.geometry);
            if (child.material !== undefined) scope.addMaterial(child.material);

            scope.addCamera(child);
            scope.addHelper(child);
        } );

        // for redo remove object command object (group of objects)
        if (parent === undefined) {
            this.scene.add(object);
        } else {
            parent.children.splice(index, 0, object);
            object.parent = parent;
        }

        this.signals.objectAdded.dispatch(object);
        this.signals.sceneGraphChanged.dispatch();
    },

    addHelper: function () { 
        var geometry = new THREE.SphereBufferGeometry( 2, 4, 2 );
        var material = new THREE.MeshBasicMaterial( { color: 0xff0000, visible: false } );

        return function ( object, helper ) {
            if (helper === undefined) {
                if (object.isCamera) {
                    helper = new THREE.CameraHelper(object);
                } else if (object.isPointLight) {
                    helper = new THREE.PointLightHelper(object, 1);
                } else if (object.isDirectionalLight) {
                    helper = new THREE.DirectionalLightHelper(object, 1);
                } else if ( object.isSkinnedMesh ) {
                    helper = new THREE.SkeletonHelper(object.skeleton.bones[0]);
                } else {
                    // no helper for this object type
                    return;
                }

                var picker = new THREE.Mesh( geometry, material );
                picker.name = 'picker';
                picker.userData.object = object;
                helper.add( picker );
            }

            this.sceneHelpers.add(helper);
            this.helpers[object.id] = helper;
            this.signals.helperAdded.dispatch(helper);
        };
    },

Так вот, решил я сделать новый проект, прохожу по отладке. Почему-то в моем проекте функция addHelper проходит через 2 первые строчки не доходя до return function()..., а в исходнике, наоборот, сразу заходит в неё. Кто-нибудь, подскажите в чём проблема? Может какие-то нюансы в js чего я не знаю?


Ответы (1 шт):

Автор решения: catete4680

Решил всё-таки проблему! Оказывается в функции addHelper в примере было:

addHelper: function () {
    // code ...
    return function ( object, material ) {
        // code ...
    }
}(),

Я пропустил последние скобки в конце. Получается при вызове функции она же снова вызывает себя при необходимости. Надеюсь я всё правильно понял.

→ Ссылка