为什么这个内部函数返回undefined?

时间:2012-03-22 20:02:54

标签: javascript function

我这样做

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.

在所有三种情况下我都会遇到问题。我已将问题包括在所有三个部分的行注释中。现在,在有人告诉我只使用闭包之前,我并不是想要理解闭包,我试图准确理解内部函数会发生什么。

如果你能解释一下,我会很感激。因为这对我来说很直观。

由于

2 个答案:

答案 0 :(得分:5)

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

要解决此问题,请getMyVar 实例成员

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

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

答案 1 :(得分:2)

您没有公开getMyVar函数。

你想:

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

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

但是,myVar也是本地范围的函数执行...并且函数尚未执行。

最后一行需要

(new myFunction()).getMyVar(); 

编辑:虽然你可能正在寻找的只是伪命名空间?在这种情况下,你可以这样做:

var myObject = { 
    myProperty: "value",
    myFunction: function() { }
}

或者,您更有可能尝试让myVar像私人会员一样行事,在这种情况下您可以这样做:

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

    return { 
        getMyVar: function() {
            return myVar;
        }
    }
}(); //self-executing function