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

时间:2017-11-10 18:01:17

标签: javascript

我知道我可以将它作为参数传递,但为了进一步理解JS,有这样的事情:

function logIt() {
  console.log(x)
}

[0,1,2].forEach(x => logIt())
// x is not defined

3 个答案:

答案 0 :(得分:2)

其实没有。函数尝试查找范围内的变量以及声明它的上述范围。在您的情况下,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();
})

答案 1 :(得分:1)

范围访问权限与功能定义的范围有关,而不是使用的范围。由于xlogIt()定义的范围内不存在,因此除非通过参数传入,否则它在函数内部不可用。

答案 2 :(得分:1)

不是,不。函数无法在调用它的范围内伸出并访问变量。*这是一件好事™。 : - )

可以定义一个logIt和匿名forEach回调都可以访问的变量,在回调中设置该变量的值,并在{中使用它{1}}:



logIt




......但在大多数情况下,这将是一件坏事。我们有函数参数是有原因的。 : - )

* 可以>在创建它的范围的执行上下文中访问变量[以及包含该上下文的上下文],但这是不同的。)

相关问题