JavaScript之严格模式 "use strict";

严格模式就是在代码片段的顶部加上一个字符串常量的语句"use
strict";(也可以用单引号),它可以是全局的,也可以是局部的(function和eval两种局部作用域)。但是它必须是代码的第一个语句(未必要是第一行)。在它之前如果有任何语句(包括空语句),严格模式的声明就会失效。

"use
strict";//全局严格模式
function
func(){ "use strict";
//局部严格模式};eval(‘"use strict";/*局部严格模式*/‘);
;"use
strict";//失效的严格模式声明
  知道了严格模式的声明,那么它到底要怎么用呢?下面我们一个个功能说明。

  1.
变量必须声明才能使用

"use
strict";a=1;
//缺少var语句做声明,因此报错
"use
strict";var a=b=1;
//错误 b未声明
  2.
函数声明语句(不包括表达式)不允许在普通代码块(不包括闭包)中使用

"use
strict";(function(){
//闭包中是允许使用函数声明语句的
function func(){};})();{
var f=function(){};
//函数声明表达式允许
function func(){};
//函数声明语句在普通闭包中,错误};
  3.
闭包内的this不指向Global对象

"use
strict";(function(){ alert(this);
//输出undefined})();
  4.
对象属性和函数形参不能重复声明

"use
strict";var o={a:1,a:1};//这个对象定义了两个a属性,因此报错
"use
strict";function func(a,a){};//这个函数的两个形参都是a,因此报错
  5.
eval拥有类似闭包的作用域

"use
strict";var a=1,b=1;eval("var
a=2");window.eval("var b=2");alert(a);
//输出1 因为运行的a变成了eval作用域的局部变量alert(b);
//输出2 window.eval依然是全局作用域
  6.
callee和caller属性无法使用

"use
strict";function func(){
return
arguments.callee;
//错误 callee无法使用};func();
  7.
with语句无法使用

"use
strict";with({});
  8.
八进制数字常量无法使用

"use
strict";var a=0999;
//十进制,可以使用var b=0123;
//八禁止,无法使用
  9.
普通模式下的一些无效操作变成错误

"use
strict";var a=1;delete a;//错误
无法删除var声明的变量
"use
strict";var o={get a(){}};o.a=1;//错误
给只读属性赋值
  暂时就总结出这些啦,还有一些细节的条款我也描述的不是那么准确,建议看看MDN上的描述。参考:

  MDN
Strict_mode

时间: 2024-07-29 19:19:32

JavaScript之严格模式 "use strict";的相关文章

JavaScript中严格模式"use strict";需注意的几个雷区:

1.with语句会抛错误 2.未声明的变量被赋值会报错 3.arguments在严格模式下变为静态,传入的参数与arguments无关系 4.delete会报错 5.对象的重复属性名会报错 6.禁止八进制变量 7.eval被认定为关键字,另外eval的参数中若有定义变量的语句,在严格模式下只是一段平凡的字符串,使用typeof检测不到在eval里定义的变量类型.

Javascript 严格模式use strict详解

1.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. 2.为什么用严格模式 - 消除Javascript语法的一些不合理.不严谨之处,减少一些怪异行为; - 消除代码运行的一些不安全之处,保证代码运行的安全: - 提高编译器效率,增加运行速度: - 为未来新版本的Javascript做好铺垫. "严格模式"体现了Javascript更合理.更

JavaScript语法支持严格模式 -- "use strict"

JavaScript 严格模式(use strict) JavaScript 严格模式(strict mode)即在严格的条件下运行. 使用 "use strict" 指令 "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增. 它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略. "use strict" 的目的是指定代码在严格条件下执行. 严格模式下你不能使用未

JavaScript高级---组合模式设计

一.设计模式 javascript里面给我们提供了很多种设计模式: 工厂.桥.组合.门面.适配器.装饰者.享元.代理.观察者.命令.责任链 在前面我们实现了工厂模式和桥模式 工厂模式 : 核心:为了生产对象,实现解耦. 桥接模式 : (桥接模式是一种既能把两个对象连接在一起,又能避免二者间的强耦合的方法.通过“桥”把彼此联系起来,同时又允许他们各自独立变化) 主要作用:主要作用表现为将抽象与其实现隔离开来,以便二者独立化. 组合模式 : (组合模式是一种专门为创建Web上的动态用户界面而量身制定

JavaScript高级---工厂模式设计

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <ti

JavaScript高级---门面模式设计

门面模式 两个作用: 1.简化类的接口 2.消除类与使用它的客户代码之间的耦合 门面模式常常是开发人员最亲密的朋友.它几乎是所有javascript库的核心原则 门面模式的目的是为了让开发人员用更简单的方法调用一些相对复杂或组合的方法,主要就是简化开发的复杂性,提供一个相对容易的API去调用内部的方法供外界去使用,这样程序员开发会变得轻松些,编写一次组合代码后可以反复的去使用它,有助于节省时间和精力 注意: 不要滥用门面模式,所以使用你心仪的门面之前一定要三思而定,搞不好你就会小题大做 引入概念

Javascript备忘模式

使用备忘模式,利用了函数的自定义属性,先看一个例子 var test = function (){} test.myAttr = "attr"; 这样,就给test加上了一个自定义的属性,myAttr. 备忘模式,正式利用了这个方法,将已经运行过的结果存储起来,将函数接受到的参数作为key,将函数运行的结果作为value返回即可.代码如下 var myFunc = function (param) { if(!myFunc.cache[param]){ var result = {};

javascript 简单工厂模式

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 var Bicycle = new Interface("Bicycle",[

JavaScript中介者模式

JavaScript中介者模式 中介者模式是迎合迪米特法则的一种实现.迪米特法则也叫最少知识原则,是指一个对象应该尽可能少地了解另一个对象.如果对象间的耦合性太高,一个对象发生改变后,难免会影响到其他的对象.在中介者模式里,对象间几乎不知道彼此的存在,它们只能通过中介者对象来互相影响.因此,中介者模式使各个对象得以解耦,以中介者和对象之间的一对多的关系取代了对象间的多对多的网状关系.各个对象只需关注自身功能的实现,对象之间的交互关系就交给中介者对象来实现和维护.      下面是一段使用中介者模