可以在 javascript 的函数内部声明一个函数。 喜欢:
function my(){
function check(){
return true;
}
console.log( check() ? "yes" : "no");
}
my();
但是,它可能不是最快的,因为每次调用 my 时,都必须重新声明检查。但是在 my 之外声明检查会污染全局范围。
如果 my 是构造函数 My,则可以将检查添加到其原型(prototype)中,但不幸的是,这样做不能使用正常功能。
解决这个问题有什么方便的方法?
最佳答案
如果您真的可以在对 my
的调用之间重用 check
,那么您可以在其中创建 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();
现在,check
是私有(private)的,但不会在您每次调用 my
时重新创建。
这是揭示模块模式的一个简单示例。您在作用域函数中隐藏了大部分内容,并“揭示”了您想要发布的内容。如果您要发布不止一件东西,您会返回一个对象,其中的东西作为属性。
有时您会看到它在作用域函数周围用括号编写,不是因为它们是必需的(如果您使用返回值则不是必需的),而是因为 you'd need them (or something with a similar effect)如果您没有使用返回值,那么它更明显地表明它是一个作用域函数:
var my = (function() { // <=== Scoping function
function my(){
console.log( check() ? "yes" : "no");
}
function check(){
return true;
}
return my; // <=== Returns `my`
})(); // <=== () calls scoping immediately
my();
关于javascript - 在 JavaScript 函数中运行而不每次都重新声明它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31624299/