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代码
Jul 20 Javascript
Javascript学习指南
Dec 01 Javascript
浅谈js的setInterval事件
Dec 05 Javascript
js对象基础实例分析
Jan 13 Javascript
使用Chart.js图表库制作漂亮的响应式表单
Oct 28 Javascript
jquery表单提交带错误信息提示效果
Mar 09 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
Jul 17 Javascript
利用nvm管理多个版本的node.js与npm详解
Nov 02 Javascript
swiper动态改变滑动内容的实现方法
Jan 17 Javascript
Vue源码解读之Component组件注册的实现
Aug 24 Javascript
Windows下安装 node 的版本控制工具 nvm
Feb 06 Javascript
js实现选项卡效果
Mar 07 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编码转换函数应用技巧
2016/10/22 PHP
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
jquery高效反选具体实现
2013/05/05 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
Python基础之函数用法实例详解
2014/09/10 Python
使用PDB模式调试Python程序介绍
2015/04/05 Python
Python入门之三角函数全解【收藏】
2017/11/08 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
python实现excel读写数据
2021/03/02 Python
python实现倒计时小工具
2019/07/29 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
python实现图像拼接
2020/03/05 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
初中作文评语大全
2014/04/23 职场文书
世界遗产的导游词
2015/02/13 职场文书
原生JS实现分页
2022/04/19 Javascript