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 相关文章推荐
IE 上下滚动展示模仿Marquee机制
Dec 20 Javascript
用jquery统计子菜单的条数示例代码
Oct 18 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
Jun 03 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
Feb 28 Javascript
jQuery实现图片轮播特效代码分享
Sep 15 Javascript
JS实现HTML标签转义及反转义
Apr 14 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
May 13 jQuery
vue中实现先请求数据再渲染dom分享
Mar 17 Javascript
layui关闭层级、简单监听的实例
Sep 06 Javascript
国内常用的js类库大全(CDN公共库)
Jun 24 Javascript
解决vue初始化项目一直停在downloading template的问题
Nov 09 Javascript
vue实现倒计时功能
Mar 24 Vue.js
超详细动手搭建一个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
php 归并排序 数组交集
2011/05/10 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
crontab无法执行php的解决方法
2016/01/25 PHP
js function定义函数的几种不错方法
2014/02/27 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
angular实现商品筛选功能
2017/02/01 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
node中的session的具体使用
2018/09/14 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
跟老齐学Python之Python安装
2014/09/12 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
python3访问字典里的值实例方法
2020/11/18 Python
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
华三通信H3C面试题
2015/05/15 面试题
广告学专业求职信
2014/06/19 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
春节晚会开场白
2015/05/29 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
汽车车尾标语大全
2015/08/11 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python
PHP RabbitMQ消息列队
2022/05/11 PHP
使用scrapy实现增量式爬取方式
2022/06/21 Python