[英]Javascript - keeping variable in scope after function has been declared
[英]Use variable (in function) after function has been declared
我知道我可以将其作为参数传递,但是为了进一步理解JS,是否有这样的事情:
function logIt() { console.log(x) } [0,1,2].forEach(x => logIt()) // x is not defined
其实不行 函数试图在声明该变量的作用域和上述作用域中查找变量。 在您的情况下, logIt
在全局范围内声明,并尝试在其中找到x
,但您的x
在传递给forEach
的函数范围内定义。 换句话说, logIt
不在x => logIt()
范围内寻找其变量。
// Global scope, Look here, this is the scope where `logIt` was declared
function logIt() {
// Look here, this is my scope
console.log(x)
}
[0,1,2].forEach(x => {
// Does not look here, it is not the scope where `logIt` was defined and not the global scope
logIt();
})
范围访问与定义功能的范围有关,而不是与使用功能的范围有关。 由于x
在定义logIt()
的范围内不存在,因此除非通过参数传入,否则它在函数内部不可用。
不是,不是 一个函数无法访问并访问称为它的作用域中的变量。*这是一件好事。 :-)
您可以定义一个变量logIt
和匿名的forEach
回调都可以访问,在回调中设置该变量的值,然后在logIt
使用它:
// DON'T DO THIS, KEEP READING let x; function logIt() { console.log(x) } [0,1,2].forEach(_x => { x = _x; logIt(); })
...但是在大多数情况下这将是Bad Thing™。 我们有函数自变量是有原因的。 :-)
* (它可以访问执行上下文中变量的创建范围和创建时间(以及包含该上下文的上下文),但这是不同的。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.