前端学习2 变量提升

JS的变量提升指的是代码在执行前会将变量提升到作用域的顶部,仅存在var声明变量中。

console.log(num + '件') // undefined

var num = 10

只提升生命,不提升赋值。 上段代码类似于

var num;

console.log(num + '件')

num = 10;

在函数作用域中也同样遵循该规则。

注意

1、let/const声明的变量在未声明即被访问时会报语法错误。

2、变量在var声明之前即被访问,变量的值为undefined。

3、let/const声明的变量不存在变量提升。

4、变量提升出现在相同作用域中。

函数提升

// 1、会把所有函数声明提升到当前作用域的最前面
// 2、只提升函数声明,不提升函数调用
fn()

function fn(){

    console.log('函数提升')
    
}
// 正常运行,因为js函数并不是立即执行的,只有在运行时,通过声明找到需要运行的函数就可以。
// 如果我们使用函数表达式声明一个函数,必须先声明函数后调用,否则会报错。
fun() // 报错

fun = function(){

	console.log('函数表达式')

}

注意

1、函数提升能够使函数的声明调用更灵活。

2、函数表达式不存在提升的现象。

3、函数提升出现在相同作用域当中。

#前端学习#
全部评论

相关推荐

03-07 23:10
已编辑
天津市咸水沽第一中学 Java
部门:做淘宝首页和流量推送策略250302 70min实习拷打。这项目你感觉你在这个过程中有哪些亮点以及能进行一下总结吗?这个项目的时候,那你有没有达到你们预期?以及有没有还能进行一些改进的点?    进程中有一共有哪些状态,以及它这些状态是怎么去流转的?进程和线程有啥区别?    Java数组、ArrayList和LinkedList有啥区别?HashMap的工作原理?exception 和 error 它的一个区别有啥呀?throw 和 throws 的区别?    重定向和转发,forward和redirect两者的区别?    介绍一下悲观锁和乐观锁?    spring 里面bean的生命周期是怎么去创建和消亡的呀?spring bean 的自动生成的一个原理?    MySQL里面的那个索引的作用是啥呀?它有什么优缺点吗?B+树索引如何实现的呢? left semi join和 left anti join的区别?count(1), count(*)和count字段的区别?    哪些场景是去使用Redis?Redis 和 memcache有啥区别?什么是缓存穿透?以及我们在该怎么去解决呢? Flink 有用过没有?Hive会出现一些数据倾斜,有了解吗?场景题:给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url算法题:判断是否是回文整数SQL题:事件表event表有3个字段event_id:事件id,event_time:事件时间,user_id:用户id。使用SQL查询同一用户两个事件的时间间隔。输出4列:事件ID,事件时间,用户id,时间间隔
查看24道真题和解析
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

更多
牛客网
牛客企业服务