变量和函数声明都会在任何代码被执行前首先被处理。
变量和函数声明从它们在代码中出现的位置被‘移动’到了最上面,这个过程叫作提升。(js解释器在执行js代码之前,会有个编译过程,编译器会把声明部分提升到当前作用域的最上方,这个过程叫作提升)
1.提升注意事项
foo() //TypeError bar() //ReferenceError var foo = function bar(){ //...... }
上述代码提升后可理解成如下:
var foo; foo(); bar(); foo = function(){ bar bar = ...self... //... }
foo(); var foo; function foo(){ console.log(1); } foo = function(){ console.log(2); } //输出1 提升后 ----------- function foo(){ console.log(1); } foo(); foo = function(){ console.log(2) } //var foo由于是重复的声明,因此被忽略了。但是出现在后面的函数声明还是可以覆盖前面的。
重复声明会导致各种问题,因此要避免这种情况。