var func=function(){console.log(that)}
var obj = {
foo(){
var that=this;
var a=func;
a();
}
}
obj.foo();
结果:
未捕获的ReferenceError:未定义
答案 0 :(得分:0)
that
仅存在于foo
内,因为它就是声明的地方。您的func
功能超出foo
,因此that
变量不存在。
如果您希望能够在两个地方访问它,可以在两个函数之外声明它:
var that;
var func=function(){console.log(that)}
var obj = {
foo(){
that=this; // <-- no var
var a=func;
a();
}
}
obj.foo();
答案 1 :(得分:0)
因为JavaScript使用词法作用域,而不是动态作用域。这意味着在运行时调用范围时不会查找变量。只有源代码的嵌套结构很重要。
答案 2 :(得分:0)
您在that
中没有引用func
。要么将其声明为全局变量,要么将其作为参数传递给func
。
选项1:将that
作为参数传递
var func = function(that) {
console.log(that)
}
var obj = {
foo() {
var that = this;
var a = func(that);
//invoke function a like this;
a;
}
}
obj.foo();
&#13;
选项2:将that
声明为全局变量
var that;
var func = function() {
console.log(that)
}
var obj = {
foo() {
that = this;
var a = func(that);
//invoke function a like this;
a;
}
}
obj.foo();
&#13;