参数提供的数据存储在哪里? var first
是隐式创建的吗?
function Student(first){
this.getFirst = function(){
return first;
}
}
测试:
var myStudent = new Student("ross");
console.log(myStudent);
//学生 { getFirst=function() }
console.log(myStudent.getFirst());
//罗斯
console.log(first);
//引用错误,first 未定义
console.log(myStudent.first);
//未定义
for(myStudent 中的变量 x){
控制台日志(x);
//获取第一个
我的第二个问题是我是否理解正确:
What happens with "var" variables inside a JavaScript Constructor?
“var” variables, "this" variables and "global" variables - inside a JavaScript Constructor
...是 getFirst
函数创建一个闭包并保存构造函数参数值的状态,如果我在构造函数主体中使用 var first
可以吗将其视为“封装”?此外,任何内部函数将所有参数值保存在“关闭状态”或仅保存内部函数引用的参数值?
非常感谢您的想法。这是我关于 S.O. 的第一个问题。但几乎每天都使用该网站作为引用,所以谢谢你。我的编程知识有限,如果我使用了蹩脚的术语,请原谅,很乐意在需要的地方澄清。
最佳答案
first
参数存储在构造函数的本地,因此 Student()
中的任何位置都在范围内。
更有趣的是,您分配给 this.getFirst
的匿名内部函数关闭那个值。因此,即使在构造函数执行完毕后,内部函数仍保留对 first
变量的引用。
这也适用于常规函数,而不仅仅是构造函数:
function makeCounter() {
var count = 1;
return function() { return count++; };
}
var counter = makeCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
如果使用得当,这种方法可用于在 JavaScript 中实现“私有(private)”变量,即从外部无法访问闭包中捕获的值。
正因为如此,事实证明闭包是捕获其范围内的所有变量还是仅捕获它使用的变量并不重要,因为无论如何您都无法“深入”那些封闭的变量。 (虽然在实践中通常只捕获使用过的值,以便运行时可以垃圾收集其余部分,因为它们是不需要的。)
关于javascript - 一个带参数但构造函数体内没有 "vars"的对象构造函数,数据在哪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150375/