JS变量提升原理与用法实例浅析


Posted in Javascript onMay 22, 2020

本文实例讲述了JS变量提升。分享给大家供大家参考,具体如下:

该篇介绍什么是变量提升,写给像我一样的JS新手看的

简单来说变量提升就是 JS会把var变量的声明自动提升到作用域的顶部,即使你不想这样

一个例子: (局部变量与全局变量同名时 , 局部变量覆盖全局变量)

var a="全局变量";
function test()
{
  document.writeln(a);
  var a="局部变量";
  document.writeln(a);
}
test();

上例的两个输出结果是

undefined局部变量

第一个输出并没有输出全局变量a而是undefined ,这就是变量提升导致的

上例等同与下例:

var a="全局变量";
function test()
{
  var a;
  document.writeln(a);
  a="局部变量";
  document.writeln(a);
}
test();

test函数内即使局部变量a还没定义,就已经覆盖了全局变量,可见其声明已经生效了,

变量声明会自动提升到作用域的顶部, 即使该语句并没执行

如下例:

var x=100;
var y=200;
function test()
{
  document.writeln(x);
  document.writeln(y);
  if(false)
  {
    var x=1;
  }
  return;
  var y=2;
}
test();

输出结果:

undefinedundefined

等同如下形式:

var x=100;
var y=200;
function test()
{
  var x,y;
  document.writeln(x);
  document.writeln(y);
  if(false)
  {
    x=1;
  }
  return;
  y=2;
}
test();

那么怎么解决这个问题呢?

用let变量!let变量执行到定义部分才会装载,具体用法请自行查询!

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript flash复制库类 Zero Clipboard
Jan 17 Javascript
修复IE9&safari 的sort方法
Oct 21 Javascript
JS模块与命名空间的介绍
Mar 22 Javascript
JS动态添加option和删除option(附实例代码)
Apr 01 Javascript
jQuery实现转动随机数抽奖效果的方法
May 21 Javascript
微信小程序 检查接口状态实例详解
Jun 23 Javascript
微信小程序wx.request实现后台数据交互功能分析
Nov 25 Javascript
vue中路由参数传递可能会遇到的坑
Dec 07 Javascript
在vue-cli中组件通信的方法
Dec 16 Javascript
快速解决处理后台返回json数据格式的问题
Aug 07 Javascript
chosen实现省市区三级联动
Aug 16 Javascript
微信小程序CSS3动画下拉菜单效果
Nov 04 Javascript
JavaScript直接调用函数与call调用的区别实例分析
May 22 #Javascript
js事件机制----捕获与冒泡机制实例分析
May 22 #Javascript
JavaScript使用prototype属性实现继承操作示例
May 22 #Javascript
详解如何修改 node_modules 里的文件
May 22 #Javascript
Node.js API详解之 readline模块用法详解
May 22 #Javascript
vue+canvas实现移动端手写签名
May 21 #Javascript
基于canvas实现手写签名(vue)
May 21 #Javascript
You might like
php获取目标函数执行时间示例
2014/03/04 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
php7下的filesize函数
2019/09/30 PHP
JS写的贪吃蛇游戏(个人练习)
2013/07/08 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
2015/12/12 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
node.js入门实例helloworld详解
2015/12/23 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
Python 字典dict使用介绍
2014/11/30 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
python表格存取的方法
2018/03/07 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
三个Unix的命令面试题
2015/04/12 面试题
人代会标语
2014/06/30 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
小爸爸观后感
2015/06/15 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL