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对象及属性
Feb 13 Javascript
passwordStrength 基于jquery的密码强度检测代码使用介绍
Oct 08 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
Sep 02 Javascript
JavaScript中创建对象和继承示例解读
Feb 12 Javascript
jQuery实现设置、移除文本框默认值功能
Jan 13 Javascript
JavaScript编程的单例设计模讲解
Nov 10 Javascript
Vue.js数据绑定之data属性
Jul 07 Javascript
用图片替换checkbox原始样式并实现同样的功能
Nov 15 Javascript
vue自定义正在加载动画的例子
Nov 14 Javascript
jQuery操作事件完整实例分析
Jan 10 jQuery
基于openlayers实现角度测量功能
Sep 28 Javascript
vue3中provide && inject的使用
Jul 01 Vue.js
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读取IMAP邮件
2006/10/09 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
2011/07/03 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
2020/02/07 PHP
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
微信小程序 Video API实例详解
2016/10/02 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
python获取list下标及其值的简单方法
2016/09/12 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
Python笔记之观察者模式
2019/11/20 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
python字典的值可以修改吗
2020/06/29 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
领导的自我鉴定
2013/12/28 职场文书
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
《故都的秋》教学反思
2014/04/15 职场文书
2014年教学工作总结
2014/11/13 职场文书
钓鱼岛事件感想
2015/08/11 职场文书