我有一个简单的问题,但我无法理解。
<script type="text/javascript">
var man = function(){
var age = 1;
this.shoes = 2;
};
man.prototype = {
create: function(){
//age = 5;
console.log(age);
console.log(this.shoes);
}
}
var man1 = new man;
man1.create();
</script>
-Ok,我创造了一个有2个vars,年龄和鞋子的男人。我用&#34;这个&#34;只在鞋子里在我用人工原型方法之后。
- 如果我执行此代码,首先是console.log说我:
未捕获的ReferenceError:未定义年龄(逻辑)
第二个控制台是&#34; 2&#34; (修正)。
- 如果我写:console.log(this.age)消息错误是:undefined。
- 但是如果我在新方法中为年龄(年龄= 5)(不使用&#34; var&#34; for create var)设置了一个值,它就可以工作。
为什么我只能使用age var,如果我在阅读之前输入了一个值,但是?
答案 0 :(得分:2)
年龄变量在“构造函数”闭包内,这使得它只在那里可用。您可以在该函数内使用age变量(闭包),但不能在外部使用。
如果您想让它可以从外部访问,请将其添加到此处或制作类似以下的getter函数:
var man = function(){
var age = 1;
this.shoes = 2;
this.getAge = function() { return age; };
};
但是如果你没有在函数中声明变量,但仍然设置它,那么它将在浏览器window
中的全局对象上定义。这不会使man对象的年龄可用,但您可以在任何地方访问它。这是一个澄清一点:
function tellAgeDelayedGlobal() {
age = 1;
setTimeout(function() { console.log(age) }, 1000);
}
function tellAgeDelayedDeclared() {
var age = 1;
setTimeout(function() { console.log(age) }, 1000);
}
tellAgeDelayedGlobal();
tellAgeDelayedDeclared();
age = 2;
这将打印到控制台:
2
1
答案 1 :(得分:2)
在函数中使用ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleWithFixedDelay(new MyRunnable(), 0, 5, TimeUnit.SECONDS);
时,它在其中可用(本地范围)。
var
此处var man = function(){
var age = 1;
this.shoes = 2;
};
仅在age
方法/构造函数中可用,因为这会为构造函数创建一个本地范围,或者更为man
。
private
这里man.prototype = {
create: function(){
age = 5;
console.log(age);
console.log(this.shoes);
}
}
将创建一个全局范围。也就是说,这相当于age
,因此可以在整个应用中使用它。因此,您可以在任何函数中检索该值,因为它现在是全局的。
必须避免这种情况,因为它不会自动进行垃圾回收(GC)。如果你真的需要它,因为你的代码的其他部分有一个依赖w.r.t.它,你可以命名为:window.age = 5
。但是,根据你目前的情况,我在这里找不到需要。