变量提升函数提升

本文解析JavaScript中的变量提升现象,包括var声明变量和function函数声明的提升特性,以及它们如何影响代码执行。同时区分了函数表达式和声明的区别,并通过实例展示了这些概念的实际操作和执行流程。
摘要由CSDN通过智能技术生成

1、 变量提升

变量 声明 提升
通过var定义(声明)的变量,在定义语句之前就可以访问到
值:undefined

// fn()  输出undefined
var a = 3
function fn (){
   console.log(a)  // 下方使用var声明了a,出现变量提升,故此时的a是可以找到的,只不过a的值为undefined
   var a = 4     // var定义声明的变量会提升,最终相当于下方效果
   // var a
   // console.log(a)
   // a = 4
}
fn()   // undefined
// 为什么不是3,在fn执行的时候会优先从自己的作用域中寻找是否有a,发现下面定义声明了var a = 4,故不会跳出该作用域寻找var a = 3,且由于是var定义出现变量提升,如上方所示

2、 函数提升

函数 声明 提升
通过function定义(声明)的函数,在之前就可以调用
值:函数定义(对象)

// fn2()  可以调用执行,下方已声明,会出现函数提升
fn2()
function fn2 (){
   console.log("fn2()")
}

3、 表达式定义的不遵循函数提升

通过function定义(声明)的函数,在之前就可以调用,不是函数声明的方式定义的函数不遵循函数提升
值:函数定义(对象)

// fn3() 不可以调用执行,下方是通过var声明变量的方式定义变量,不关心值是多少,遵循的的是变量提示
// 此时fn3还是undefined 并不是可以执行的函数
fn3()
var fn3 = function(){
   console.log("fn3")
}

注:
function add(){}这种写法叫做函数声明
var add=function(){}这种写法叫做函数表达式
function(){}这种是匿名函数

f1();//输出结果:123
f2();//Uncaught TypeError: f2 is not a function
function f1(){
    console.log("123");
}
var f2 = function(){
    console.log("f2");
}

实际上执行过程

function f1(){
   console.log("123");
}// 函数提升,整个代码块提升到函数作用域的最顶端
f1();
f2();
var f2 = function(){
    console.log("f2");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值