js变量提升
在JavaScript中,变量提升(Hoisting)是一种特殊的语法行为,它允许变量和函数声明在它们实际出现之前被JavaScript引擎识别。这意味着,当你在代码的后面部分使用一个变量或函数时,JavaScript引擎实际上已经在前面的位置找到了它。
变量提升:
当你在一个作用域内声明一个变量时,JavaScript引擎会立即创建一个变量绑定,并将这个变量绑定到那个作用域上。这意味着无论这个变量在哪里声明,它都已经被提升了。然而,只有变量的声明会被提升,赋值操作仍然会在原地执行。
例如:
console.log(foo); // 输出 "undefined"
var foo = 20;
在这个例子中,尽管foo
是在console.log(foo);
之后声明的,但var foo = 20;
实际上已经被移到了这段代码的开始。所以输出的结果是 "undefined",因为在执行到console.log(foo);
时,foo
还没有被赋值。
函数提升:
函数提升是指函数声明会被提升到它们所在的作用域的顶部。这意味着你可以在函数声明之前调用这个函数。
例如:
foo(); // 输出 "Hello World!"
function foo() {
console.log("Hello World!");
}
在这个例子中,尽管foo()
是在function foo() {...}
之后被调用的,但函数声明function foo() {...}
实际上已经被移到了这段代码的开始。所以输出的结果是 "Hello World!"。