【发布时间】:2014-05-29 03:32:42
【问题描述】:
有没有办法从在闭包外部定义但在闭包内引用的函数打印 temp(闭包变量)的值,而不将 temp 作为变量传递给 funcA?
var funcA, funcB;
funcA = function () {
console.log(temp);
}
funcB = function () {var temp, funcC;
temp = 1;
funcC = funcA;
funcC();
}
funcB(); // temp is undefined.
这可行,但只是因为 funcA 是在 funcB 中定义的:
funcB = function () {var temp, funcA, funcC;
temp = 1;
funcA = function () {
console.log(temp);
}
funcC = funcA;
funcC();
}
funcB(); // 1
我正在尝试找到一种方法,将一些函数定义从外部函数中提取出来,以简化变得有点复杂的代码。我可以在 funcB 之外定义 funcA 但仍然引用 temp 变量而无需传递参数吗?
我读到 javascript 没有动态运行时范围,它只是词法范围,但是通过在 funcB 中引用一个函数(通过 funcC 的 funcA),有没有办法满足词法范围要求并提供对范围的访问funcB 的变量?
【问题讨论】:
-
函数只能访问定义在其作用域(函数作用域)内的变量和定义在全局作用域内的变量。
funcA将无法在funcB中访问temp,因为它不是闭包。如果您想从任何函数访问temp,请在全局范围内定义它。 -
这似乎是一个 XY 问题。像这样的问题需要一个真实的例子来为你的实际问题提供一个好的解决方案。
-
@Akinkunle 你刚刚给了我一个解决方案的想法。我会发布它。我可以将整个东西包装在一个函数中并使用该函数的范围(就像一个全局范围,但仅限于我的应用程序)。
-
@ChrisG。是的,这就是模块的编写方式。您将整个代码封装在一个大函数范围内,这样全局范围就不会被污染。
标签: javascript