Javascript 参数列表中的私有变量
我有以下功能声明:Javascript 参数列表中的私有变量,javascript,Javascript,我有以下功能声明: function Linker(linked_class, word_class, colors_count) { var _linked_class = linked_class; this.say = function() { alert(_linked_class); } } 我想使用\u linked\u class作为函数内部的私有变量。我的问题是,我是否需要在函数中创建\u linked\u class变量,并分配lin
function Linker(linked_class, word_class, colors_count) {
var _linked_class = linked_class;
this.say = function() {
alert(_linked_class);
}
}
我想使用\u linked\u class
作为函数内部的私有变量。我的问题是,我是否需要在函数中创建\u linked\u class
变量,并分配linked\u class
变量传递参数列表的值,或者我可以使用传递参数的变量作为私有变量而无需声明?例如:
function Linker(_linked_class, word_class, colors_count) {
this.say = function() {
alert(_linked_class);
}
}
我想是的,你可以用两种方法。因为javascript在创建函数时保留函数上下文。因此,在第二个示例中,无论何时调用“say”,链接类都是有效值 在JavaScript中有两种流行的“保护隐私”方法。一种是通过闭包-构造函数参数属于构造函数闭包。在这种情况下,这些变量和函数将无法从函数外部访问 另一种方法是将它们视为正则变量/方法。开头的下划线不是一种语言机制,而是程序员用来表示隐私的约定。例如:
function Linker(linked_class, word_class, colors_count) {
this.say = function() {
alert(linked_class);
// if you want to access a "conventionally private",
// (or any other method from the same class),
// you can do it like this:
this._whisper();
}
this._whisper = function() {
alert(linked_class);
}
this._pseudoPrivateVariable = 5;
}
下划线在闭包中不常见。谢谢!在您的示例中,两个方法都通过闭包访问“linked_class”变量。我理解下划线不是一种语言机制。您能否演示以下“另一个是将它们视为正则变量/方法”,即如何在没有闭包的情况下访问变量?实际上,我的示例包含这两种方法。链接的类通过闭包是私有的_whisper的命名类似于私有方法。每个人都可以访问它,但程序员知道他们通常不应该访问。我添加了一个示例,说明如何从同一个类调用方法,以防这是您的意思。Sabof,谢谢您的评论,但我想这仍然不是我想要的。我最初的问题是,使用参数列表中的变量和将其指定给函数中显式创建的另一个变量之间是否有任何区别。从您的回答中,我还假设除了使用闭包之外,还有另一种创建和访问私有变量的方法。函数中声明的所有变量及其参数都属于同一范围。谢谢!在我的两种情况下,我都能正常工作,我的问题是哪一种更好,为什么