是否可以在JavaScript中使用内部函数?

时间:2014-05-13 17:16:57

标签: javascript

如何访问我的y()功能?

function x() {
    function y() {
        return 1;
    }
}

有可能吗?

4 个答案:

答案 0 :(得分:2)

它的范围是x,有点像:

function x() {
    var y;
}

所以,是的,从x开始,否则没有。

如果您愿意,可以将其创建为x上的属性:

var x = (function () {
    function x() {
        …
    }

    function y() {
        …
    }

    x.y = y;

    return x;
})();

答案 1 :(得分:0)

您的意思是从函数x外部访问它?

这是不可能的,y未运行时,x函数不存在。它在x内部声明,因此只能在x内访问。

要使其在x之外可访问,您需要在函数外部公开对它的引用。如果公开对它的引用,它将在函数结束后存活。例如:

function x() {
  function y() {
    return 1;
  }
  return y;
}

// get the reference to y
var f = x();
// call y
f();

答案 2 :(得分:0)

您只能访问 x 功能范围内的 y 功能。 但是,如果从 x 函数返回 x 函数或者将其分配给全局变量或< strong> x 功能。这也是闭包,你的 y 函数会将内存中的引用保留在它传递的范围内。

function x() {
    var anotherNum= 2;
    function y() {
        return 1 + anotherNum;
    }

    return y;
}

现在你可以获得 y 函数及其创建的范围。请注意,它将在计算中使用anotherNum,因为它是在 x 函数中创建的

var yFunc = x();
console.log(yFunc()) // will print 3

答案 3 :(得分:0)

一种方法是将其退出范围

function x() {
    function y() {
        return 1;
    }
    return { 
        y:y         
    };
}

每当调用x()时,它都会返回一个函数为y的对象作为成员

var a = x();
a.y();  //this returns 1

这与此处描述的揭示模块模式类似: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FClosures

阅读闭包也很好: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FClosures