博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
变量声明和函数声明提升
阅读量:7112 次
发布时间:2019-06-28

本文共 914 字,大约阅读时间需要 3 分钟。

console.log(getName)var getName=function(){    console.log(1);}function getName(){    console.log(2);}var getName='3'console.log(getName)function getName(){    console.log(4);}

打印结果

function getName(){    console.log(4);}3

js引擎在解析代码时,会统一先声明,再赋值,是把所有声明提升到顶端,而赋值依然保留在原来的位置。函数会优先被提升,并且是整个函数被提升,变量提升取最后一次赋值为最终值,解析(声明提升)结果:

function getName(){    console.log(2);}function getName(){    console.log(4);}var getNamevar getNameconsole.log(getName)getName=function(){    console.log(1);}getName='3'console.log(getName)

变量提升:

var a= 3function fun() {  if (a) {     var a = 5;  }  console.log(a); }fun()   //undefined

当函数内部声明了变量a时,函数内所有的a取值都不会取函数外的值。解析后:

var a= 3function fun() {  var a  if (a) {      a = 5;  }  console.log(a); }fun()   //undefined

关于let:

ES6中新增了块级作用域let,可以把if和for循环变成块级作用域,let不属于window属性,同一块级内不能重复定义,let不会有变量提升,和var不同,在var之前打印变量显示undefined,let之前打印变量会报错,找不到。

转载于:https://www.cnblogs.com/wy90s/p/9993692.html

你可能感兴趣的文章
jQuery一点一滴系列教程(第三点)
查看>>
ARP解决方法/工具 真假ARP防范区别方法 ARP终极解决方案
查看>>
系统数据权限的实现方案
查看>>
华为vlan划分,单臂路由以及静态路由
查看>>
UCD 2010百度工作坊
查看>>
ssh2免密码登录
查看>>
4_move_find_into_model
查看>>
MySQL · 捉虫动态 · UK 包含 NULL 值备库延迟分析
查看>>
windows server 2012 standard Evaluation 安装试用
查看>>
windows server 2008中配置TCP/IP
查看>>
网管必读:交换机技术简介及应用分析
查看>>
.NET多线程编程(9)——Thread类
查看>>
HP DL380G6上安装配置Vmware_ESXI4.1
查看>>
单IP无TMG拓扑Lync Server 2013:活动目录
查看>>
3.VMware vsphere 5.0新体验-安装VMware Center
查看>>
趣题: 一道面试题的解法
查看>>
Java Scoket之java.io.EOFException解决方案
查看>>
Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST…
查看>>
Android应用程序启动过程源代码分析(5)
查看>>
Linux桌面版横评:八、中标普华桌面Linux 3.0.1
查看>>