繁体   English   中英

在函数声明后使用变量(在函数中)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM