我做这个

function myFunction() {
    var myVar = "I think I am encapsulated";

    function getMyVar() {
        return myVar;
    }
}

var myProperty = myFunction;
myProperty.getMyVar();  // tells me myProperty.getMyVar is not a function.




function myFunction() {
    var myVar = "I think I am encapsulated";

    function getMyVar() {
        return myVar;
    }
}

var myProperty = myFunction();
myProperty.getMyVar();   // tells me myProperty is undefined


乃至

function MyFunction() {
    var myVar = "I think I am encapsulated";

    function getMyVar() {
        return myVar;
    }
}

var myProperty = new MyFunction();
myProperty.getMyVar();  // tells me myProperty.getMyVar is not a function.


在这三种情况下,我都会遇到问题。我在所有三个部分中均已将该问题作为在线注释中的一部分。现在,在有人告诉我只使用闭包之前,我并不想理解闭包,而是试图确切了解内部函数会发生什么。

如果您能在上面解释,我将不胜感激。因为这对我来说很直观。

谢谢

最佳答案

您所做的只是在myFunction中定义一个函数,创建一个闭包...

要补救该实现,请使getMyVar成为实例成员:

function myFunction() {
    var myVar = "I think I am encapsulated";

    this.getMyVar = function () {
        return myVar;
    }
}

10-06 00:26