函数调用上下文
Function-calling Context
我认为下面的 JavaScript 会在 entryPoint().
的上下文中导致 obj.fn
到 运行
但是当obj.fn()
运行s时,会引发'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()
在两种情况下都不知道调用它的上下文,而不仅仅是一个?
上下文是this
的值。您没有使用它,因此它与您的问题无关。
范围未通过。函数保留它声明的作用域(这就是我们可以在 JS 中使用闭包的原因)。由于在第一个示例中 PassRcvr
未在 entryPoint
内定义,因此它无法访问作用域为 entryPoint
.
的变量
在第一种情况下 PassRcvr
位于全局范围内,而 locVar
在 entryPoint
函数的局部范围内 - 这就是无法访问它的原因。
在第二种情况下,PassRcvr
和 locVar
都在一个本地范围内。
我认为下面的 JavaScript 会在 entryPoint().
obj.fn
到 运行
但是当obj.fn()
运行s时,会引发'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()
在两种情况下都不知道调用它的上下文,而不仅仅是一个?
上下文是this
的值。您没有使用它,因此它与您的问题无关。
范围未通过。函数保留它声明的作用域(这就是我们可以在 JS 中使用闭包的原因)。由于在第一个示例中 PassRcvr
未在 entryPoint
内定义,因此它无法访问作用域为 entryPoint
.
在第一种情况下 PassRcvr
位于全局范围内,而 locVar
在 entryPoint
函数的局部范围内 - 这就是无法访问它的原因。
在第二种情况下,PassRcvr
和 locVar
都在一个本地范围内。