1.首先理解函数作用域

在JavaScript中,变量的定义并不是以代码块作为作用域的,而是以函数作用作用域的。也就是说,如果变量是在某个函数中定义的,那么它在函数以外的地方是不可见的。而如果该变量是定义在if 或者for这样的代码块中,它在代码块之外是可见的。另外,在JavaScript中,术语“全局变量”指的是定义在所有函数之外的变量,与之相对的是“局部变量”,所指的是在某个函数中的变量。其中,函数内的代码可以像访问自己的局部变量那样访问全局变量,反之则不行。

2.变量提升

在JavaScript代码运行之前其实是有一个编译阶段的。编译之后才是从上到下,一行一行解释执行。变量提升就发生在编译阶段,它把变量和函数的声明提升至作用域的顶端。(编译阶段的工作之一就是将变量与其作用域进行关联)。
所以对于代码var a =2;来说,编译器看到的是两行代码var a; a = 2;第一个语句是声明语句,在编译阶段处理。第二个语句是赋值语句,在运行阶段处理。

1.提升的部分只是变量声明,赋值语句和可执行的代码逻辑还保持在原地不动
2.提升只是将变量声明提升到变量所在的变量范围的顶端,并不是提升到全局范围
3.变量声明和函数声明都会得到变量提升,但函数声明会最先得到提升,然后是变量声明。
4.对于函数声明来说,如果定义了相同的函数变量声明,后定义的声明会覆盖掉先前的声明
JavaScript中变量提升------Hoisting
JavaScript变量提升
Javascript作用域和变量提升
从一个例子来理解函数声明预解析

最新文章

  1. JS /JQuery 获取变量为数字时 容易出错 可能不是数字类型
  2. 扫描二维码自动识别手机系统(Android/IOS)
  3. MySQL5.7(5.6)GTID环境下恢复从库思(qi)路(yin)方(ji)法(qiao)
  4. vbox 网络配置文件
  5. 【项目经验】之——Controller向View传值
  6. laravel 删除一条migration后要执行composer命令
  7. LoadRunner - 结果分析 / Result Analysis
  8. C#中的线程(上)-入门 分类: C# 线程 2015-03-09 10:56 53人阅读 评论(0) 收藏
  9. PHP curl 模拟登陆
  10. cas+tomcat+shiro实现单点登录-1-tomcat添加https协议
  11. Java 中Calendar、Date、SimpleDateFormat学习总结
  12. Linux shell中的竖线(|)——…
  13. Snort初探
  14. C/C++语言简介之语言特点
  15. Druid.jar包
  16. JavaScript Array some() 方法
  17. C#-hello world(二)
  18. nginx 端口映射多个应用
  19. 《剑指offer》替换空格
  20. python学习Day3 变量、格式化输出、注释、基本数据类型、运算符

热门文章

  1. Python周末21天笔记
  2. [译]The Python Tutorial#12. Virtual Environments and Packages
  3. python实现导出excel表(前端+后端)
  4. linux下编译openjdk8
  5. 计算时间复杂度&空间复杂度
  6. MD5碰撞
  7. mate viewport
  8. git+jenkins持续集成一:git上传代码
  9. 双网卡只有一个能ping通的解决办法
  10. 深入学习之mysql(三)单表操作