变量提升和函数提升:就是将变量声明或者函数全部代码提升到当前作用域(全局作用域或函数作用域)最开始的部分。
JavaScript中函数域为最小域范围;for循环、while循环、if语句、switch语句的“{}”不是作用域。
注意:这里指的是ES6之前。
一、变量提升
1.所指的形式:var variable = '提升';(必须有关键字'var')。
2.提升的方式:将“var variable;”提升到当前作用域的顶部;“variable='提升'”在原先定义的位置。
3.具体代码:
console.log(variable); var variable = '我是全局中的变量'; console.log(variable); function fn (){ console.log(interiorVariable); var interiorVariable = '我是函数内的变量'; console.log(interiorVariable); } fn(); //变量提升执行顺序 /* var variable; //变量提升,全局作用域范围内,此时只是声明,并没有赋值 console.log(variable); //undefined variable = '我是全局中的变量'; //此时才赋值 console.log(variable); //我是全局中的变量 function fn () { var interiorVariable; //变量提升,函数作用域范围内 console.log(interiorVariable); //undefined interiorVariable = '我是函数内的变量'; //此时对局部变量进行赋值 console.log(interiorVariable); //我是函数内的变量 }*/
二、函数提升
1.函数提升所指的形式:function fn(){......};(必须是函数声明的形式,不能是函数表达式的形式)。
2.函数提升的方式:将“function fn(){......}”整个函数声明代码块提升到当前作用域的顶部,原先位置以不存在该代码。
console.log(f1); //函数提升,整个代码块提升到文件的最开始<br> f1(); console.log(f2); function f1(){ console.log('我是函数f1。。。'); } var f2 = function () { console.log('我是函数f2。。。'); }; (function () { console.log('closure'); a = 'aaa'; var a = 'bbb'; console.log(a); })(); //函数提升的执行过程 /* function f1(){ console.log('我是函数f1。。。'); } var f2; console.log(f1); f1(); f2 = function(){ console.log('我是函数f2。。。'); }*/参考文章:https://www.cnblogs.com/kawask/p/6225317.html