为什么一个未定义的函数实际上是从Javascript clousure调用的

Why an undefined functions is actually called from Javascript clousure?

本文关键字:实际上 Javascript 调用 clousure 函数 为什么 一个 未定义      更新时间:2023-09-26

我正在研究这段代码

var myModule = function () {

    //"private" variables:
    var myPrivateVar = "01I can be accessed only from within YAHOO.myProject.myModule.";
    //"private" method:
    var myPrivateMethod = function () {
        console.log("02I can be accessed only from within YAHOO.myProject.myModule");
    }

    return  {
        myPublicProperty: "I'm accessible as YAHOO.myProject.myModule.myPublicProperty.",
        myPublicMethod: function () {
            console.log("1I'm accessible as YAHOO.myProject.myModule.myPublicMethod.");
            //Within myProject, I can access "private" vars and methods:
            console.log("2"+myPrivateVar);
            console.log("3"+myPrivateMethod());
            //The native scope of myPublicMethod is myProject; we can
            //access public members using "this":
            console.log("4"+this.myPublicProperty);
        }
    };
}();

并想知道输出:

1I'm accessible as YAHOO.myProject.myModule.myPublicMethod.
201I can be accessed only from within YAHOO.myProject.myModule.
02I can be accessed only from within YAHOO.myProject.myModule
3undefined
4I'm accessible as YAHOO.myProject.myModule.myPublicProperty.

谁能解释为什么 02I 只能从 YAHOO.myProject.myModule 中访问,如果输出中未定义myPrivateMethod(),则输出? 以及为什么它显示在console.log("3"+myPrivateMethod())之前?

谁能解释为什么如果 myPrivateMethod(( 未定义,则输出 02I 只能从 YAHOO.myProject.myModule 中访问?

myPrivateMethod不是undefined. myPrivateMethod()是。该函数已定义,它没有return语句,因此其返回值为 undefined

以及为什么它显示在 console.log("3"+myPrivateMethod((( 之前?

myPrivateMethod()被计算(因此执行函数并触发其中的console.log语句(,然后才能与字符串"3"连接并传递给其他console.log

相关文章: