js中函数和变量的提升
内容:js在执行前会先进行预编译,在预编译中会对js代码进行函数和变量的提升。提升存在的根本原因是解决函数之间相互调用的情况。
1.我们可以在还没有定义变量的时候,使用变量。
console.log(a);
var a = 1;
输出: undefined
提升之后的代码:
var a;
console.log(a);
a = 1;
2.函数声明也可以提升,但是函数表达式不能提升。
2.1函数声明
console.log(a);
function a(){};
输出:函数定义
提升之后的代码:
function a (){};
console.log(a);
2.2函数表达式
console.log(a)
var a = function(){};
输出:undefined
提升之后的代码:
var a;
console.log(a);
a = function(){};
3.函数提升会优先于变量被提升,但是变量声明会被忽略。
console.log(a);
function a() {};
var a = 1;
输出:函数定义
提升之后的代码:
function a() {};
var a; //被忽略
console.log(a);
a = 1;
规则:
1.同名的变量声明,提升之后,后面的会被忽略。
2.同名的函数声明,后面的函数声明覆盖前面的函数声明。
3.同名的变量和函数声明,函数提升优先于变量提升,函数声明在变量声明之前,后面的变量声明会被忽略。