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 相关文章推荐
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
Feb 05 Javascript
js apply/call/caller/callee/bind使用方法与区别分析
Oct 28 Javascript
json 实例详细说明教程
Oct 31 Javascript
测试JavaScript字符串处理性能的代码
Dec 07 Javascript
Jquery 常用方法经典总结
Jan 28 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
Apr 16 Javascript
jquery自动填充勾选框即把勾选框打上true
Mar 24 Javascript
很棒的Bootstrap选项卡切换效果
Jul 01 Javascript
jQuery实现 RadioButton做必选校验功能
Jun 15 jQuery
JavaScript实现与使用发布/订阅模式详解
Jan 19 Javascript
vue 组件销毁并重置的实现
Jan 13 Javascript
Javascript Web Worker使用过程解析
Mar 16 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
基于php split()函数的用法详解
2013/06/05 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
jQuery(非HTML5)可编辑表格实现代码
2012/12/11 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
2019/09/14 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
web.py 十分钟创建简易博客实现代码
2016/04/22 Python
python Celery定时任务的示例
2018/03/13 Python
Python OpenCV处理图像之图像直方图和反向投影
2018/07/10 Python
Django REST framework 分页的实现代码
2019/06/19 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
10条PHP编程习惯
2014/05/26 面试题
大学本科毕业生的自我鉴定
2013/11/26 职场文书
大学生创业计划书的范文
2014/01/07 职场文书
单位实习证明怎么写
2014/01/17 职场文书
实习指导老师评语
2014/04/26 职场文书
小摄影师教学反思
2014/04/27 职场文书
党员一帮一活动总结
2014/07/08 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
学生自我评语
2015/01/04 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL