JavaScript变量提升和严格模式实例分析


Posted in Javascript onJanuary 27, 2019

本文实例讲述了JavaScript变量提升和严格模式。分享给大家供大家参考,具体如下:

1.什么是变量提升

所谓的变量提升指的是:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体(作用域)的最顶部。

下面我们通过一个例子来详细说明一下。

//变量声明在使用之前
var x;
console.log(x);//undefined
//变量声明在使用之后
console.log(y);//undefined
var y;
//上面的式子可以写成下面的样子
/*
变量提升:把x,y提升到顶部
var x;
var y;
console.log(x);
console.log(y);
*/

从上面这个例子我们可以看到:

①变量的使用有两种形式,先声明再使用或者先使用后声明;

②无论是哪一种形式都不影响变量的使用,这是因为有变量提升的存在,每一个你定义的变量都会被提升到顶部,也就是函数最开始的部分,这就变成了你在使用变量时其实都已经声明变量了。

下面我举一个经典的例子来更好地理解一下。

//经典案例:window表示全局,判断条件(变量a是否有在全局下)是在变量a声明之前
if(a in window){
  var a;
  console.log('a in window');
}else{console.log('a not in window');}
//a in window
//相当于:
/*
var a; //a被提升到顶部
if(a in window){
  console.log('a in window');
}else{console.log('a not in window');}
*/

这是变量提升的一个很好的例子,可以看到打印出来的结果表明,在我们使用a之前,声明变量a就被提升到顶部。

但是,要注意的是JavaScript 只有声明的变量会提升,初始化的不会。

console.log(c);//undefined
var c = 1; //初始化
/*
var c;
console.log(c);
c = 1;
*/
var d;//声明d
d = 1;//初始化
console.log(d);//1

上面的c打印结果为undefined,这是因为提升的只有声明变量var c,而初始化的c=1没有提升而在使用之后。

为了避免上面出现的变量提升的问题,通常我们在每个作用域开始前声明我们要使用的变量。

2.严格模式

严格模式的写法就是在代码编写之前加上"use strict",严格模式要求你不能使用未声明的变量,否则会报错。

例如:

"use strict"; //严格模式
m =1;
console.log(m);//m is not defined
//在严格模式下,因为m未被声明就被使用或者初始化则会报错
var n = 1;
console.log(n);//1

但是在没有使用严格模式的时候:

m =1;
console.log(m);//1
//在非严格模式下,同样这样写就不会报错

虽然还是没有声明变量m但还是可以使用的。

所以,还是建议大家尽可能得使用严格模式来编写javascript代码,以消除Javascript语法的一些不合理、不严谨之处,让自己成为一个更优秀的程序员。

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

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

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

Javascript 相关文章推荐
JS中的public和private对象,即static修饰符
Jan 18 Javascript
js实现简单登录功能的实例代码
Nov 09 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
Mar 23 Javascript
JavaScript DOM事件(笔记)
Apr 08 Javascript
js实现精美的图片跟随鼠标效果实例
May 16 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
Apr 14 Javascript
AngularJS表达式讲解及示例代码
Aug 16 Javascript
BootStrap入门教程(三)之响应式原理
Sep 19 Javascript
微信小程序实现顶部选项卡(swiper)
Jun 19 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
May 03 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
Mar 19 Javascript
JS实现按比例缩小图片宽高
Aug 24 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
Jan 27 #Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
Jan 27 #Javascript
原生JS检测CSS3动画是否结束的方法详解
Jan 27 #Javascript
原生JS实现的跳一跳小游戏完整实例
Jan 27 #Javascript
nuxt中使用路由守卫的方法步骤
Jan 27 #Javascript
vue-cli构建vue项目的步骤详解
Jan 27 #Javascript
vue实现的仿淘宝购物车功能详解
Jan 27 #Javascript
You might like
全国中波电台频率表
2020/03/11 无线电
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
PHP 透明水印生成代码
2012/08/27 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
列表内容的选择
2006/06/30 Javascript
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
JS Array对象入门分析
2008/10/30 Javascript
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
2010/11/21 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
Python中用于计算对数的log()方法
2015/05/15 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
《夹竹桃》教学反思
2014/04/20 职场文书
感情真挚的毕业生求职信
2014/07/19 职场文书
医德医风自我评价
2014/09/19 职场文书
2014年向国旗敬礼活动总结
2014/09/27 职场文书
2014年设计师工作总结
2014/11/25 职场文书
邀请函怎么写
2015/01/30 职场文书
简历自荐信范文
2015/03/09 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python
pytorch Dropout过拟合的操作
2021/05/27 Python
Django drf请求模块源码解析
2021/06/08 Python
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS