在javascript中将参数传递给闭包函数

Abh*_*jit 6 javascript closures javascript-objects

MyLibrary.MyModule =
        (
            function initialise() {
                this.id = id;
                this.c = document.getElementById(id);
                this.ctx = this.c.getContext('2d');

                this.properties = {
                    setup: {
                        backgroundColour: options.setup.backgroundColour || 'black'
                    },

                    scale: {
                        show: options.scale.show || true,
                        colour: options.scale.color || 'white'
                    },
                }
                console.log(properties.setup.baseFontSize);
            }
        )(id, options);
Run Code Online (Sandbox Code Playgroud)

我正在调用此代码

new MyLibrary.MyModule('c',options);
Run Code Online (Sandbox Code Playgroud)

但'id'和选项似乎没有定义.
有人可以帮忙吗?

Poi*_*nty 6

如上所述,我认为这不会像你想要的那样做.你正在初始化"MyLibrary.MyModule"基本上没什么; 那个"初始化"函数没有返回值,而你正在调用它,好像它确实有一个.

我不知道你要做什么,但是:

MyLibrary.MyModule = (function whatever() { /* ... */ })(id, options);
Run Code Online (Sandbox Code Playgroud)

手段,"调用函数任何具有由变量的值的参数列表'id’和变量'选项’,然后设置属性'MyModule的到任何从该返回的值在MyLibrary'’在对象上由称为’功能调用."

当烟雾消失时,据我所知,"MyLibrary.MyModule"将不是一个功能.也许如果你解释你想要的意思,那么有人可以帮助解决它.


use*_*716 5

MyLibrary.MyModule自己就是undefined.这是因为您正在调用一个没有返回值的匿名函数来分配它.

我认为你的意思是这样做:

MyLibrary.MyModule = function initialise(id, options) {
            this.id = id;
            this.c = document.getElementById(id);
            this.ctx = this.c.getContext('2d');

            this.properties = {
                setup: {
                    backgroundColour: options.setup.backgroundColour || 'black'
                },

                scale: {
                    show: options.scale.show || true,
                    colour: options.scale.color || 'white'
                },
            }
            console.log(properties.setup.baseFontSize);
        };
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

var inst = new MyLibrary.MyModule('c',options);
Run Code Online (Sandbox Code Playgroud)

......而'c'options将被接收作为参数传递给构造函数.

如果您对立即调用的函数表达式的目的是关闭构造函数可以引用的某个默认值,那么IIFE将需要返回一个引用该值的函数.