如何访问我的y()
功能?
function x() {
function y() {
return 1;
}
}
有可能吗?
答案 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