js中函数声明方式有三种:

console.log('--->', a);

var a = function () {
  console.log('a1');
};


console.log('--->', b.toString());

function b () {
  console.log('a1');
}

console.log('--->', A.toString());

function A() {
  console.log('A');
};

那么上面的代码输出结果是什么样子呢:

---> undefined
---> function(){console.log("a1")}
---> function(){console.log("A")}

从结果可以看出,后面两种声明方式可以在函数声明之前直接调用,然而第一种方式,变量只会在声明之前被初始化为undifined,不能直接调用。所以结论:
1.第一种方式只会触发var的变量提升,在代码解析阶段var被初始化为undifined,执行阶段才会被赋值,所以第一种方式只能在声明语句之后才能调用
2.第二,第三种方式,都会在代码解析阶段(生成执行上下文)就被赋值,所以在执行的时候已经有值了可以被调用


H_H_code
51 声望3 粉丝