我认为下面的JavaScript会导致obj.fn
在entryPoint().
但是当obj.fn()
运行时,会引发'locVar is undefined'
异常。
function entryPoint () {
var locVar = "xxx";
var obj = {};
PassRcvr(obj);
obj.fn();
}
function PassRcvr(passedObj) { // Being an object, the arg is passed by reference.
passedObj.fn = function () {
alert(locVar);
}
}
下面的JScript,但 以locVar.
function entryPoint () {
var locVar = "xxx";
var obj = {};
PassRcvr(obj);
obj.fn();
function PassRcvr(passedObj) {
passedObj.fn = function () {
alert(locVar);
}
}
}
为什么obj.fn()
不知道在这两种情况下调用它的上下文,而不仅仅是那个?
答案 0 :(得分:1)
上下文是this
的值。您没有使用它,因此它与您的问题无关。
未传递范围。函数保持声明的范围(这就是为什么我们可以在JS中使用闭包)。由于在第一个示例中PassRcvr
未定义entryPoint
,因此它无法访问范围为entryPoint
的变量。
答案 1 :(得分:1)
在第一种情况下,PassRcvr
位于全局范围内,而locVar
位于entryPoint
函数的本地范围内 - 这就是无法访问它的原因。
在第二种情况下,PassRcvr
和locVar
都在一个本地范围内。