JS中的函数提升和变量提升

变量提升和函数提升:就是将变量声明或者函数全部代码提升到当前作用域(全局作用域或函数作用域)最开始的部分。

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);    //函数提升,整个代码块提升到文件的最开始
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


你可能感兴趣的:(JS学习笔记)