2

我被教导在顶部定义变量,无论它们在代码中的位置如何,因为这就是 JavaScript 解释事物的方式。所以,我的理解是:

var foo = "Bob";

if (2 + 2 === 4) {
    var car = "Blah";
}

将被解释为:

var foo = "Bob",
    car;

if (2 + 2 === 4) {
    car = "Blah";
}

我的理解正确吗?我一直试图将我的变量定义放在当前范围的顶部,但有时这些变量只需要在if语句内部,所以在外部定义它们似乎有点奇怪——这仍然是最佳实践吗?

4

3 回答 3

5

是的。var语句被提升(这就是为什么最佳实践是在函数顶部使用它们的原因——它避免了人们假设块范围而不是函数范围的混淆)

于 2012-04-27T13:21:45.337 回答
4

是的。变量和函数声明被提升到定义它们的范围的顶部。由于 JavaScript 仅具有函数范围(而不是块范围),因此示例中范围的顶部位于if语句之外。

请注意,由于函数表达式实际上只是变量声明,因此函数本身不会被提升(因为赋值发生在您想要的地方)。这意味着它仅在分配后可用...

sayHello(); //Uh-oh... TypeError, undefined is not a function!
var sayHello = function() {
    console.log("Hi!");
};

...与函数声明相反,它可以在源代码中定义之前使用:

sayHello(); //"Hi!"
function sayHello() {
    console.log("Hi!");
}
于 2012-04-27T13:21:56.807 回答
1

是的,在作用域之上定义它们总是好的(并且 javascript 是函数作用域的),您可以在此处阅读有关此的更多信息。

于 2012-04-27T13:22:56.483 回答