js 变量提升和函数提升

变量提升

在js中,使用变量前需要先对其进行声明,所有的js声明变量都由关键字var声明(还有let...)。如果只是声明了变量,并未对其赋值,那么该变量默认值为undefined

变量提升也就是把变量提升到当前作用域(或者函数)的顶部位置,注意的时,提升的只是变量的声明,并不会将变量的值一同提升上来。列如:

函数提升

函数声明:以关键字function开头的函数为函数声明。

函数表达式(函数字面量):不是以function开头的均可被称为函数表达式

如图所示:

                   

 在js代码执行之前引擎会先进行预编译,预编译期间会将函数声明提升到当前作用域的最顶端。函数提升只会提升函数声明,函数提升是可以直接在函数声明之前调用函数的,且成功执行它。但是不会提升函数表达式。 如果是两个函数声明,出现在后面的函数声明可以覆盖前面的。

列如:

函数提升比变量提升的优先级要高;

列如,当函数名和变量名同名的情况下,看看他们的结果:

 按照上面变量提升的例子,第一个打印的结果应该为undefined,但是他两个打印值为函数test()函数体,由此可见函数提升比变量提升的优先级要高一些,但是函数不会被变量的声明覆盖,会被变量赋值之后覆盖,如图所示,函数的值被覆盖了:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值