[英]Is it possible to use inner functions in JavaScript?
如何访问我的y()
函数?
function x() {
function y() {
return 1;
}
}
有可能吗?
它的范围是x
,有点像:
function x() {
var y;
}
所以,是的,从x
内,否则没有。
如果你想要它,你可以在x
上创建它作为属性:
var x = (function () {
function x() {
…
}
function y() {
…
}
x.y = y;
return x;
})();
你的意思是从函数x
外部访问它?
这是不可能的,当x
没有运行时,函数y
不存在。 它在x
内部声明,因此只能在x
内部访问。
要使它在x
外部可访问,您需要在函数外部公开对它的引用。 如果公开对它的引用,它将在函数结束后存活。 例如:
function x() {
function y() {
return 1;
}
return y;
}
// get the reference to y
var f = x();
// call y
f();
你可以得到只有X功能的范围内访问您的y功能。 但是,如果从x函数返回y函数或将其分配给全局变量或x函数之外的变量,则可以访问y函数。 这也知道是闭包 ,你的y函数会将内存中的引用保留在它传递给它的范围内。
function x() {
var anotherNum= 2;
function y() {
return 1 + anotherNum;
}
return y;
}
现在你可以得到y函数以及它所创建的作用域。请注意,它将在x函数中创建的计算中使用anotherNum。
var yFunc = x();
console.log(yFunc()) // will print 3
一种方法是将其退出范围
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?redloclale = en-US&redirectslug = JavaScript%2FGuide%2FClosures
阅读闭包也很好: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures? redloclale = en-US & redirectslug = JavaScript%2FGuide% 2FClosures
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.