博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 声明提前机制
阅读量:6567 次
发布时间:2019-06-24

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

声明提前机制

在JavaScript存在着这样一种预处理机制,即浏览器在解析JS代码时会将var声明的变量和function声明的函数提升到当前作用域的顶部。但是解析JS代码时对var和function关键字声明的对象的处理是不一样的:前者在解析时只是将声明提前了,但是赋值却依旧在原来的位置。而后者不仅将声明提前了,而且将定义也完成。具体请看下面的例子:

1 console.log(hello);         //undefined2 sayHi();                    //hi3 4 var hello = "hello";5 console.log(hello);         //hello6 7 function sayHi() {8     console.log("hi");9 }

在第一行输出一个在下面用var声明并且赋值的hello变量,没有报错但是输出的是undefined,说明hello变量的声明确实是被提前了但是没有赋值,所以输出的是undefined。正是因为给变量赋值依旧在原来的位置,所以第五行输出hello变量可以正常输出。在处理function定义的sayHi函数时,sayHi的声明被提前了,同时也对它进行了定义,所以在第二行调用sayHi时正常输出hi而不是报 sayHi is not defined 或者sayHi is not a function的错。

函数声明优先于变量声明

需要注意的是:函数声明优先于变量声明,看下面例子:

1 console.log(sayHi);         // ƒ sayHi() { console.log("hi"); }2 3 var sayHi = "sayHi";4 function sayHi() {5     console.log("hi");6 }7 8 console.log(sayHi);         // sayHi

先用var声明变量sayHi并赋值为"sayHi",然后用function再将sayHi重新声明为一个函数。在声明的前后输出sayHi,发现前面输出的是一个函数,后面输出的是一个字符串"sayHi"。显然可以看出函数声明是优先于变量声明的。

这篇博客正好也解释了我之前写的一篇,感兴趣的可以去看一下。

转载于:https://www.cnblogs.com/weiyalin/p/9447637.html

你可能感兴趣的文章
团队随笔
查看>>
1.7 文件目录管理及相关的命令使用方法
查看>>
类成员与类的实例成员
查看>>
Spark源码编译并在YARN上运行WordCount实例
查看>>
Spring AOP + AspectJ annotation example
查看>>
Spring VS EJB 3 的若干认识误区(转)
查看>>
React.js初探(一)
查看>>
json_encode后的中文不编码成unicode
查看>>
修改纵断面图标注栏
查看>>
Flex创建带有空间信息的椭圆(Polygon)
查看>>
Centos7.1环境下搭建BugFree
查看>>
共用y轴的双图形绘制
查看>>
第31讲 | 数字货币钱包服务
查看>>
P2073 送花
查看>>
iOS端项目注释规范附统一代码块
查看>>
HTTP深入浅出 http请求
查看>>
为YUM设置代理的方法
查看>>
Java 编程的动态性 第1 部分: 类和类装入--转载
查看>>
【转】持久化消息队列之MEMCACHEQ
查看>>
Dom4j学习笔记
查看>>