时间:2021-05-26
本文实例讲述了JavaScript变量提升和严格模式。分享给大家供大家参考,具体如下:
1.什么是变量提升
所谓的变量提升指的是:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体(作用域)的最顶部。
下面我们通过一个例子来详细说明一下。
//变量声明在使用之前var x;console.log(x);//undefined//变量声明在使用之后console.log(y);//undefinedvar 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//相当于:这是变量提升的一个很好的例子,可以看到打印出来的结果表明,在我们使用a之前,声明变量a就被提升到顶部。
但是,要注意的是JavaScript 只有声明的变量会提升,初始化的不会。
console.log(c);//undefinedvar c = 1; //初始化var d;//声明dd = 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.jb51.net/code/HtmlJsRun测试上述代码运行结果。
更多关于JavaScript相关内容还可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了JavaScript严格模式(usestrict)用法。分享给大家供大家参考,具体如下:使用"usestrict"的目的是指定代码在严格条件下执行
主要内容:1、分析JavaScript的词法作用域的含义2、解析变量的作用域链3、变量名提升时什么最近在传智播客讲解JavaScript的课程,有不少朋友觉得J
本人学习javascript时间也不是很长,目前就如下5点心得,后续慢慢更新。1.给未经声明的变量赋值在严格模式下会导致抛出ReferenceError错误(意
严格模式:由ECMA-262规范定义的JavaScript标准,对javascrip的限制更强。(非严格的模式,被称为“马虎模式/稀松模式/懒散模式”。)一、严
本文实例讲述了JavaScript的变量声明与声明提前用法。分享给大家供大家参考,具体如下:JavaScript的变量声明JavaScript的变量声明语句无论