假设我正在尝试执行这个 JavaScript 片段。假设未声明的变量和方法在上面的其他地方声明,并且 something
和 somethingElse
评估为布尔值真。
try {
if(something) {
var magicVar = -1;
}
if(somethingElse) {
magicFunction(magicVar);
}
} catch(e) {
doSomethingWithError(e);
}
我的问题是: magicVar
的范围是什么,是否可以像我所做的那样将它传递给 magicFunction
?
原文由 user5243421 发布,翻译遵循 CC BY-SA 4.0 许可协议
Javascript 具有函数作用域。这意味着
magicvar
将从它声明的函数的开头一直存在到该函数的结尾,即使该语句从未执行过。这称为 变量提升。函数声明也会发生同样的事情,这又称为 函数提升。如果变量在全局范围内声明,那么它将对 所有 对象可见。这是全局变量在 Javascript 中被认为是邪恶的部分原因。
Your example will pass
undefined
intomagicFunction
ifsomething
is false, becausemagicVar
hasn’t been assigned to anything.虽然这在技术上是有效的 Javascript,但它通常被认为是糟糕的风格,并且不会通过像 jsLint 这样的风格检查器。像这样极其不直观的 Javascript 将在没有任何错误的情况下执行
流行小测验:以下代码的作用是什么?