【发布时间】:2016-07-30 17:30:18
【问题描述】:
为什么会发生以下情况?
function f1() {
this.myRefVar = 30;
this.myRefVar2 = 30;
var parent = this;
return function() {
this.myRefVar = 20;
console.log('parent contains ' + Object.keys(parent).filter(function(k) {
return k.indexOf('myRefVar') > -1;
}));
console.log('parent value of myRefVar: ' + parent.myRefVar);
console.log('this value of myRefVar: ' + this.myRefVar);
};
}
f1()();
输出:
parent contains myRefVar,myRefVar2
parent value of myRefVar: 20
this value of myRefVar: 20
【问题讨论】:
-
只需将
"use strict";添加到f1看看会发生什么。 -
我想我现在明白了,在函数内部使用
this(不是constructor现在是对象method)与在不使用var的情况下定义变量是一样的,这很糟糕事情,因为这使得变量引用全局范围,而不是函数局部范围。
标签: javascript scope executioncontext