函数内部的JavaScript函数,而不是每次都重新声明它

时间:2015-07-25 07:58:02

标签: javascript functional-programming

可以在javascript中声明函数内部的函数。 像:

function my(){
   function check(){
      return true;
   }

   console.log( check() ? "yes" : "no");
}

my();

但是,它可能不是最快的,因为每次调用时,都必须重新声明检查。但在我之外宣布检查会污染全球范围。

如果 我的 是构造函数 我的 ,则可以将检查添加到其原型中,但不幸的是,这样做了不能正常使用。

解决此问题的便捷方法是什么?

2 个答案:

答案 0 :(得分:9)

如果您可以在对check的调用之间真正重用my,那么您可以在内联调用的作用域函数中创建mycheck并返回{{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");