经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
详谈js的变量提升以及使用方法
来源:jb51  时间:2018/10/8 8:44:07  对本文有异议

介绍

变量提升Hoisting是人们对JavaScript执行上下文工作方式的一种认识,并不是官方给出的改变

从字面上理解,变量提升的意思是变量和函数的声明会在物理层移动到作用域的最前面。但是这样理解并不准确,效果是相同的,但是实际的实现方式是JavaScript的变量和函数的声明会在编译阶段放入内存

这意味着使用者在正式声明一个函数或者变量之前就能够使用它

函数的提升

在JavaScript中,在声明一个函数前,我们就能够使用它,大家应该都体验过,像这样:

  1. test();
  2.  
  3.  
  4. function test() {
  5.  
  6. // do something
  7.  
  8. }

在正常的使用情况下,应该需要先声明函数才能调用,但是这种方法仍然能够运行,这是因为JavaScript自动将函数声明事先存入了内存的原因,看起来就像JavaScript自动把函数声明提升到了最前面

变量的提升

对于变量,JavaScript使用类似的方法,但是要注意一点的是,对于变量的提升,JavaScript只会将变量声明提升,但是不会把初始化提升,如果在变量初始化之前使用,则会得到undefined

  1. // undefined
  2.  
  3. console.log(a);
  4.  
  5. // ReferenceError: b is not defined
  6.  
  7. console.log(b);
  8.  
  9. var a = 10;
  1. // undefined
  2.  
  3. console.log(num);
  4.  
  5. num = 6;
  6.  
  7. // 6
  8.  
  9. console.log(num);
  10.  
  11. num += 7;
  12.  
  13. // 13
  14.  
  15. console.log(num);
  16.  
  17. var num;
  1. // undefined
  2.  
  3. console.log(num);
  4.  
  5. num = 1;
  6.  
  7. // 1
  8.  
  9. console.log(num);
  10.  
  11. var num = 2;
  12.  
  13. // 2
  14.  
  15. console.log(num);

这里要注意,JavaScript的变量提升是针对var的,而let和const不存在变量提升这一特性

  1. // ReferenceError: a is not defined
  2.  
  3. console.log(a);
  4.  
  5. let a = 10;

一个复杂一点的例子

  1. var a = 100;
  2.  
  3. function fn() {
  4.  
  5. // undefined
  6.  
  7. console.log(a);
  8.  
  9. var a = 200;
  10.  
  11. // 200
  12.  
  13. console.log(a);
  14.  
  15. }
  16.  
  17. fn();
  18.  
  19. // 100
  20.  
  21. console.log(a);
  22.  
  23. var a;
  24.  
  25. // 100
  26.  
  27. console.log(a);
  28.  
  29. // 300
  30.  
  31. var a = 300;
  32.  
  33. console.log(a);

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号