"use strict" 的目的是指定代码在严格条件下执行。

严格模式下你不能使用未声明的变量。

严格模式声明

严格模式通过在脚本或函数的头部添加 "use strict"; 表达式来声明。

严格模式下不能使用没有定义的变量,如果在严格模式下是用了未定义的变量,控制台就会报错。

"use strict";
myFunction(); x = 2;// 报错 (x 未定义) function myFunction() {
y = 3.14; // 报错 (y 未定义)
}

如果在函数内部声明了严格模式,则只在函数内部有效,局部作用域。

x = 3.14;       // 不报错
myFunction(); function myFunction() {
"use strict";
y = 3.14; // 报错 (y 未定义)
}

使用严格模式的优点:

  • 消除代码运行的一些不安全之处,保证代码运行的安全;
  • 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
  • 提高编译器效率,增加运行速度;
  • 为未来新版本的Javascript做好铺垫。

"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。

另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员工程师。

严格模式的限制

1、不允许使用未声明的变量。

2、不允许删除变量或对象。

"use strict";
var x = 3.14;
delete x; //报错

3、不允许删除函数。

4、不允许变量重名。

5、不允许使用八进制。

6、不允许使用转义字符。

7、不允许对只读属性赋值。

"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // 报错

8、禁止this关键字指向全局对象

function f(){
return !this;
}
// 返回false,因为"this"指向全局对象,"!this"就是false function f(){
"use strict";
return !this;
}
// 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。

因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。

function f(){
"use strict";
this.a = 1;
};
f();// 报错,this未定义

浅谈JavaScript严格模式(use strict)的更多相关文章

  1. 浅谈JavaScript中的闭包

    浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...

  2. 浅谈JS严格模式

    浅谈JS严格模式 简介 何为严格模式?严格模式(strict mode)即在严格的条件下运行,在严格模式下,很多正常情况下不会报错的问题语句,将会报错并阻止运行. 但是,严格模式可以显著提高代码的健壮 ...

  3. 浅谈JavaScript中的正则表达式(适用初学者观看)

    浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ...

  4. 浅谈javascript函数节流

    浅谈javascript函数节流 什么是函数节流? 函数节流简单的来说就是不想让该函数在很短的时间内连续被调用,比如我们最常见的是窗口缩放的时候,经常会执行一些其他的操作函数,比如发一个ajax请求等 ...

  5. 浅谈JavaScript浮点数及其运算

    原文:浅谈JavaScript浮点数及其运算     JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题 ...

  6. 浅谈 JavaScript 编程语言的编码规范

    对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编 ...

  7. 浅谈javascript的原型及原型链

    浅谈javascript的原型及原型链 这里,我们列出原型的几个概念,如下: prototype属性 [[prototype]] __proto__ prototype属性 只要创建了一个函数,就会为 ...

  8. 浅谈JavaScript中的null和undefined

    浅谈JavaScript中的null和undefined null null是JavaScript中的关键字,表示一个特殊值,常用来描述"空值". 对null进行typeof类型运 ...

  9. [转载]浅谈JavaScript函数重载

     原文地址:浅谈JavaScript函数重载 作者:ChessZhang 上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都 ...

随机推荐

  1. Java基础---Java循环区别

    三种循环的区别. 1. 如果条件判断从来没有满足过,那么for循环和while循环将会执行0次,但是do-while循环会执行至少一次.2. for循环的变量在小括号当中定义,只有循环内部才可以使用. ...

  2. 详解Cookie、Session和缓存

    1 Cookie和Session Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力. Session可以用Cookie来实 ...

  3. 下载GDB调试工具peda

    命令: 1.git clone https://github.com/longld/peda.git ~/peda 2.echo "source ~/peda/peda.py" & ...

  4. 在一个form表单中实现多个submit不同的action

    在button中用JS的事件绑定onclick实现,如下: <!-- employees是表单的name属性值--> <script type="text/javascri ...

  5. 日志(log4j2)

    日志测试java代码如下: package com.learn.test; import org.apache.logging.log4j.LogManager; import org.apache. ...

  6. Django迁移

    Django迁移 学习目标: 如何在不编写任何SQL语句的情况下创建数据库表 更改model如何自动修改数据库 如何还原对数据库所做的更改 迁移能解决的问题 如果你不了解Django或者WEB开发,肯 ...

  7. VBA常量(八)

    常量是一个命名的内存位置,用于保存脚本执行期间固定(无法更改)的值.如果用户试图更改常量值,则脚本执行结束时会出现错误.常量声明与声明变量相同. 以下是命名常量的规则 - 常量名称必须使用一个字母作为 ...

  8. spingboot启动报驱动Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of th

    原因: springboot应用了最新的驱动com.mysql.cj.jdbc.Driver,这个驱动需要用mysql-connector-java包的6.x版本才可以, 而mysql-connect ...

  9. div上中下布局中间自适应

    需求1: 头尾固定高度,中间自适应 1.上部(header)Div高度固定100px,宽度100%: 2.下部(footer)Div高度固定100px,宽度100%: 3.中部(middle)DIV高 ...

  10. 安装theano踩过的坑(gpu)

    参考 http://deeplearning.net/software/theano/install.html TensorFlow出了点问题 python3.7的环境 pip安装 keras已经安装 ...