【发布时间】:2017-01-04 08:48:14
【问题描述】:
为什么函数在定义范围内,使这样的代码不起作用?
function foo() {
var text = "abc";
bar(); // ReferenceError because bar cannot access foo's local variables
}
function bar() {
console.log(text); // Calling bar inside foo does not grant it access to foo's local variables
}
foo();
如果我们定义一个名为 text 的全局变量,我只能想象 bar 工作。
我知道我们可以访问函数的局部变量的唯一方法是创建一个像这样的闭包
function foo() {
var text = "abc";
return function() {
console.log(text);
}
}
bar = foo();
bar();
嗯,我喜欢认为我了解 JavaScript 作用域(包括 ES6 的块作用域)。 所以我想我的问题是,为什么在另一个函数内部调用的函数不能访问外部函数的范围,就好像它是在其中定义的一样?这样做有什么坏处?
【问题讨论】:
-
这似乎需要编写带有未声明变量的函数,以便稍后由周围的调用上下文填充。在我看来(诚然,不是语言设计者),这只是传递参数的一个非常令人困惑的替代方案。换句话说,函数已经拥有一种从调用上下文接受值的方法:参数。有两种不同的方式来提供值似乎令人困惑(例如,想象需要记录一个函数接受哪些参数和它期望调用上下文声明哪些变量)。
标签: javascript function scope