严格模式:

除了正常运行模式,ECMAscript5添加了第二种运行模式:“严格模式”(strict mode)。顾名思义,这种模式是的Javascript在更严格的条件下运行。

严格模式的作用:

 1.消除了JS语法的一些不合理、不严谨之处,减少一些怪异行为;
    2.消除代码运行的一些不安全之处,保证代码运行的安全;
    3.提高编译器效率,增加运行速度;
    4.为未来新版本的JS做好铺垫
 
    严格模式体现了JS更合理,更安全,更严谨的发展方向,包括IE10在内的主流浏览器都已经支持它了

 注意:同样的代码,在“严格模式”中,可能会有不一样的运行结果,一些在“正常模式”下可以正常运行的语句,在“严格模式”下将不能运行

严格模式的用法:

    如何进入严格模式?
进入严格模式的标志,书写这一行语句 "use strict"
老的浏览器会把他当成一串普通的字符串,加以忽略 “严格模式”有两种调用方式,适用于不同的场合;
针对整个脚本文件:将 "use strict" 放在脚本文件的第一行,则整个脚本文件都将以“严格模式”运行,
如果这行语句不在第一行,则无效,整个脚本以“正常模式”运行。
如果不同模式的代码文件合并成一个文件,这一点需要特别注意。 针对单个函数:将 "use strict" 放在函数的第一行,则整个函数以“严格模式”运行。 脚本文件的变通写法:因为第一种调用方式不利于文件合并,所以更好的做法是,借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数中 匿名函数:不需要调用,直接执行,可以自调用
(function(){
console.log(1);
})()

进入严格模式后的行为变更:

1.全局变量声明时,必须加关键字(var)
        正常模式:a = 10;    console.log(a)    //
严格模式:a = 10; console.log(a) //a is not defined
2.this无法指向全局对象
        正常模式:function fn(){ console.log(this) }        //window
严格模式:function fn(){ console.log(this) } //undefined
3.函数内不允许出现重名参数
        正常模式:function fn( a,b,b ){ console.log(a,b) }
fn(1,2,3) //1,3
严格模式:function fn( a,b,b ){ }
//报错:Duplicate parameter name not allowed in this context 在此上下文中不允许出现重复的参数名
4.arguments对象
        4.1 arguments对象(实参)不允许被动态改变
正常模式:function fn(a){
a=20;
console.log(a); //
console.log(arguments[0]); //
}
fn(10); 严格模式:function fn(a){
a=20;
console.log(a); //
console.log(arguments[0]); //
}
fn(10);
4.2 arguments对象不允许被自调用(递归)
正常模式:function fn(a){
if( a == 1 ){
return 1;
}
return arguments.callee(a-1) + a;
}
fn(3); //
严格模式:function fn(a){
if( a == 1 ){
return 1;
}
return arguments.callee(a-1) + a;
}
//报错:'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
//报错:"caller","arguments","callee",不能在严格模式下使用

JavaScript基础05——严格模式的更多相关文章

  1. javascript基础05

    javascript基础05 1.变量的作用域 变量既可以是全局,也可以是局部的. 全局变量:可以在脚本中的任何位置被引用,一旦你在某个脚本里声明了全局变量,你就可以 在这个脚本的任何位置(包括函数内 ...

  2. JavaScript基础对象创建模式之模块模式(Module Pattern)(025)

    模块模式可以提供软件架构,为不断增长的代码提供组织形式.JavaScript没有提供package的语言表示,但我们可以通过模块模式来分解并组织 代码块,这些黑盒的代码块内的功能可以根据不断变化的软件 ...

  3. JavaScript基础对象创建模式之单体/单例模式(Singleton)

    首先,单例模式是对象的创建模式之一,此外还包括工厂模式.单例模式的三个特点: 1,该类只有一个实例 2,该类自行创建该实例(在该类内部创建自身的实例对象) 3,向整个系统公开这个实例接口 Java中大 ...

  4. JavaScript基础对象创建模式之链式调用模式(Chaining Pattern)(029)

    链式调用模式允许一个接一个地调用对象的方法.这种模式不考虑保存函数的返回值,所以整个调用可以在同一行内完成: myobj.method1("hello").method2().me ...

  5. JavaScript基础对象创建模式之静态成员(027)

    在支持“类”的面向对象语言中,静态成员指的是那些所有实例对象共有的类成员.静态成员实际是是“类”的成员,而非“对象”的成员.所以如果 MathUtils类中有个叫 max()的静态成员方法,那么调用这 ...

  6. JavaScript基础对象创建模式之私有属性和方法(024)

    JavaScript没有特殊的语法来表示对象的私有属性和方法,默认的情况下,所有的属性和方法都是公有的.如下面用字面声明的对象: var myobj = { myprop: 1, getProp: f ...

  7. JavaScript基础对象创建模式之声明依赖模式(023)

    运用了命名空间(Namespace)模式后, 就可以使用一些JavaScript库了,比如YAHOO作用YUI2库的全局对象,可以通过 YAHOO.util.Dom 和 YAHOO.util.Even ...

  8. JavaScript基础对象创建模式之命名空间(Namespace)模式(022)

    JavaScript中的创建对象的基本方法有字面声明(Object Literal)和构造函数两种,但JavaScript并没有特别的语法来表示如命名空间.模块.包.私有属性.静态属性等等面向对象程序 ...

  9. JavaScript基础对象创建模式之对象的常量(028)

    虽然许多编程语言提供了const关键字来支持常量的声明,但JavaScript里没有表示常量的语义.我们可以用全大写的方式来声明变量,表明它实际上是个常量: Math.PI; // 3.1415926 ...

随机推荐

  1. POJ 1251 Jungle Roads - C语言 - Kruskal算法

    Description The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid ...

  2. redis源码分析(四)--aof持久化

    Redis aof持久化 Redis支持两种持久化方式:rdb与aof,上一篇文章中已经大致介绍了rdb的持久化实现,这篇文章主要介绍aof实现. 与rdb方式相比,aof会使用更多的存储空间,因为它 ...

  3. (七)pdf的构成之文件体(page对象)

    页面(page) 通过页面树访问文档的页面,页面树定义PDF文档中的所有页面.树包含表示PDF文档页面的节点,可以是两种类型:中间节点和叶节点.中间节点也称为页面树节点,而叶节点称为页面对象.最简单的 ...

  4. Selenium+Java(十)Selenium常用方法

    前言: 通过前几篇博客的已经了解了元素如何定位,提示框下拉框如何处理,多表单,鼠标键盘操作.此篇博客来介绍拿到想应的driver对象后如果对于对象做一些操作. get //打开网站 driver.ge ...

  5. The five Day 水平翻转图像,然后反转图像并返回结果

    """ 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结 ...

  6. ps 修补工具

    最近刚好遇到需要p图去除水印,这里将ps去除水印的使用记录下来已备翻阅 1.需求图片(如下),使用软件 photo shop cc 2017(以下简称ps) 2.操作 2.1方法一 使用五点修复画笔工 ...

  7. Java虚拟机如何运行Java字节码

    一.Java的class文件的内容 1.首先编写一个简单的代码 public class StringDemo { public static void main(String[] args) { S ...

  8. Windows下MongoDB的下载安装、环境配置

    下载MongoDB 1.进入MongoDB官网,Products -> 选择SOFTWARE下的MongoDB Server 2.选择下载最新版 3.选择对应的版本下载 msi安装包形式安装Mo ...

  9. SAP Hybris Commerce启用customer coupon的前提条件

    今天在工作中,我发现一个问题:在SAP帮助文档里,backoffice coupon 维护界面有个 Customer Assignment的区域: 而我工作的Hybris服务器上的backoffice ...

  10. 图说jdk1.8新特性(2)--- Lambda

    简要说明 jdk常用函数式接口 Predicate @FunctionalInterface public interface Predicate<T> { boolean test(T ...