jS是单线程的语言,执行顺序肯定是顺序执行,但是JS 引擎并不是一行一行地分析和执行程序,而是一段一段地分析执行,会先进行编译阶段然后才是执行阶段。

例子一:变量提升

  1. foo; // undefined
  2. var foo = function () {
  3. console.log('foo1');
  4. }
  5. foo(); // foo1,foo赋值
  6. var foo = function () {
  7. console.log('foo2');
  8. }
  9. foo(); // foo2,foo重新赋值

例子二:函数提升

  1. foo(); // foo2
  2. function foo() {
  3. console.log('foo1');
  4. }
  5. foo(); // foo2
  6. function foo() {
  7. console.log('foo2');
  8. }
  9. foo(); // foo2

例子三:声明优先级,函数 > 变量

  1. foo(); // foo2
  2. var foo = function() {
  3. console.log('foo1');
  4. }
  5. foo(); // foo1,foo重新赋值
  6. function foo() {
  7. console.log('foo2');
  8. }
  9. foo(); // foo1