【发布时间】:2017-11-17 14:15:39
【问题描述】:
我正在关注一个 JS 教程,并在下面遇到了这个示例,从我目前所学到的知识来看,第一个是有道理的:
function makeCounter() {
function counter() {
return counter.count++;
};
counter.count = 0;
return counter;
}
let counter = makeCounter();
let counter1 = makeCounter();
console.log(counter()); // 0
console.log(counter()); // 1
console.log(counter1()); // 0
所以,这是有道理的,因为每次我们将 makeCounter 函数分配给新变量时都会创建新的词法环境。我不明白的是,如果我使用函数makeCounter 的属性,如果我将makeCounter.count 分配给新变量,我仍然会增加它:
function makeCounter() {
function counter() {
return makeCounter.count++;
};
makeCounter.count = 0;
return counter;
}
let counter = makeCounter();
let counter1 = makeCounter();
console.log(counter()); // 0
console.log(counter()); // 1
console.log(counter1()); // 2
【问题讨论】:
-
这是怎么复制的?
-
@AjayGaur 这不是那个问题的重复。
-
在javascript中,语法
makeCounter.count = 0;(带有函数名,不在实例上)相当于静态属性,而this.count = 0;是非静态的
标签: javascript