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

Ant*_*ald 4 javascript functional-programming

可以在javascript中声明函数内部的函数.喜欢:

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

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

my();
Run Code Online (Sandbox Code Playgroud)

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

如果是构造函数My,可以将check添加到其原型中,但不幸的是,这不适用于普通函数.

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

T.J*_*der 9

如果你真的可以重用check调用之间my,那么你可以创建mycheck内嵌调用的作用域函数中,并返回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();
Run Code Online (Sandbox Code Playgroud)

现在,它check是私有的,但每次打电话都不会重新创建my.

这是揭示模块模式的简单示例.您隐藏了范围函数中的大多数内容,并"显示"您要发布的内容.如果要发布多个内容,则返回一个对象,其中的内容作为属性.

有时你会看到它在范围界定函数周围用parens编写,不是因为它们是必要的(如果你使用返回值它们就不是这样),但是因为你需要它们(或类似效果的东西)如果你没有使用返回值,因此更明显的是它是一个范围函数:

var my = (function() { // <=== Scoping function

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

    function check(){
        return true;
    }

    return my;         // <=== Returns `my`
})();                  // <=== () calls scoping immediately

my();
Run Code Online (Sandbox Code Playgroud)