可以在javascript中声明函数内部的函数。 像:
function my(){
function check(){
return true;
}
console.log( check() ? "yes" : "no");
}
my();
但是,它可能不是最快的,因为每次调用时,都必须重新声明检查。但在我之外宣布检查会污染全球范围。
如果 我的 是构造函数 我的 ,则可以将检查添加到其原型中,但不幸的是,这样做了不能正常使用。
解决此问题的便捷方法是什么?
答案 0 :(得分:9)
如果您可以在对check
的调用之间真正重用my
,那么您可以在内联调用的作用域函数中创建my
和check
并返回{{1}出于它:
my
现在,var my = function() { // <=== Scoping function
function my(){
console.log( check() ? "yes" : "no");
}
function check(){
return true;
}
return my; // <=== Returns `my`
}(); // <=== () calls scoping immediately
my();
是私有的,但每次拨打check
时都不会重新创建。
这是揭示模块模式的一个简单示例。您隐藏了范围函数中的大多数内容,并“显示”您要发布的内容。如果要发布多个内容,则返回一个包含其中内容的对象作为属性。
有时候你会看到它在范围函数周围用parens编写,而不是因为它们是必要的(如果你使用的是返回值则不是这样),但是因为you'd need them (or something with a similar effect)如果你不是' t 使用返回值,因此它更明显地表明它是一个范围函数:
my
答案 1 :(得分:-1)
不确定我是否正确理解了您的问题,但您可以将该功能设置为返回的一部分,并且仅在您需要时调用它,例如:
function my(){
// Function code here
return {
check : function(){
return true;
}
};
}
var myVar = my();
console.log(myVar.check() ? "true" : "false");