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添加到其原型中,但不幸的是,这不适用于普通函数.
解决这个问题的便捷方法是什么?
如果你真的可以重用check调用之间my,那么你可以创建my和check内嵌调用的作用域函数中,并返回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)