【发布时间】:2013-03-18 20:59:35
【问题描述】:
我习惯于将所有变量设置为其父作用域,而不是隐式调用它们:
function outer() {
var x, y;
function inner() {
var x = this.x;
x = ...// doing stuff here
y = ....// implicit calling parent variable
}
}
这样,如果我输入错误的变量,它就不会进入全局空间。但似乎在私有函数中使用this 声明变量将返回我undefined:
function f() {
var x = [0];
function f1() {
console.log('f1:', this.x, x);
f2();
}
function f2() {
console.log('f2:', this.x, x);
}
return { x:x , f1:f1 };
}
var foo = f();
foo.f1();
//output
f1: [0] [0]
f2: undefined [0]
如果我理解正确,它不应该发生,因为f1 和f2 都应该可以使用this 访问其外部范围。我在这里缺少任何概念吗?还是我现在只能忍受?
更新:澄清一下,我主要关心的是为什么f1 和f2 之间存在差异。我更喜欢将f2 隐藏起来,因为它会做一些内部工作,而其他开发人员在从f() 声明某些内容时不应该使用它。
【问题讨论】:
-
thisinf2是f1,而不是outer -
this是函数的执行上下文,而不是函数的内部范围。当您调用foo.f1()时,内部的f1()this指的是foo。如果你想在内部函数中使用来自父作用域的变量,只需按名称引用它们——不带this。 -
您忘记在
f1函数中添加var x = this.x;。
标签: javascript this scope