JS在严格模式和非严格模式的区别
若想在严格模式下使用JS,需要在文件的第一行加上“use strict”,在实际开发中,常常将“use strict”加入到闭包的内部
具体是:
整个脚本中使用:在这个JavaScript文件开头写'use strict'; 在闭包内部中使用
funtion () {
'use strict';
}
- 严格模式下,不允许使用with
with语句 扩展一个语句的作用域链。
with (expression) {
statement
}
- 严格模式下,不允许给未声明的变量赋值
- 严格模式下,arguments与参数不存在映射关系
function(h) {
arguments[0] = 100;
console.log(h); //100
}(1);
function(h) {
'use strict';
arguments[0] = 100;
console.log(h); //1
}(1);
但是,但参数是对象时,是存在映射关系的:
function(h) {
'use strict';
console.log(h.a);//1
arguments[0].a = 100;
console.log(h.a); //100
}({a:1});
严格模式下,删除参数名,函数名报错。非严格模式返回false,不报错也没有任何效果
function(h) {
console.log(h); //1
console.log(delete h); //false
console.log(a); //1
}(1);
function(h) {
'use strict';
console.log(h); //1
delete h; //SyntaxError(语法错误)
console.log(h); //1
}(1)
严格模式下,函数参数名重复报错。非严格模式最后一个重名参数会覆盖之前的重名参数。
function (a, a, b) {
console.log(a + b); //5
}(1, 2, 3);
!function (a, a, b) {
'use strict';
console.log(a + b); //SyntaxError
}(1, 2, 3);
严格模式下,删除不可配置(configurable=false)的属性报错。非严格模式返回false,不报错也没有任何效果
function (a){
var obj={};
Object.defineProperty(obj,'a',{ configurable: false });
console.log(delete obj.a); //flase
}(1);
!function (a){
'use strict';
var obj={};
Object.defineProperty(obj, 'a', { configurable: false });
console.log(delete obj.a); //TypeError
}(1);
- 严格模式下,修改不可写(writable=false)的属性报错
unction () {
var obj = { a: 1 };
Object.defineProperty(obj, 'a', { writable: false });
obj.a = 2;
console.log(obj.a); //1 //证明没有被修改
}();
!function () {
'use strict';
var obj = { a: 1 };
Object.defineProperty(obj, 'a', {writable: false});
obj.a = 2; //TypeError
}();
严格模式下,一般函数调用,this指向undefined,而不是全局对象。
function () {
function fun() { return this; }
console.log( fun() ); //Window
}();
!function () {
'use strict';
function fun() { return this; }
console.log( fun() ); //undefined
}();
严格模式下,不再支持arguments.callee/caller。
JS在严格模式和非严格模式的区别的更多相关文章
- JS严格模式和非严格模式的区别
严格模式和非严格模式的区别 //f1.js 'use strice'; //整个js文件都是严格模式下执行的 var n = 1; var foo = function(){...}; //... v ...
- JS-严格模式、非严格模式
2018年11月14日晚上,我在“深入理解javascript”书上第一次知道“严格模式”“非严格模式”这2个名词: “严格模式”使用指令:“use strict”: 这个指令我其实有经常看到,在其他 ...
- socket异步通信-如何设置成非阻塞模式、非阻塞模式下判断connect成功(失败)、判断recv/recvfrom成功(失败)、判断send/sendto
socket异步通信-如何设置成非阻塞模式.非阻塞模式下判断connect成功(失败).判断recv/recvfrom成功(失败).判断send/sendto 博客分类: Linux Socket s ...
- XCode工程中ARC模式与非ARC模式共用(转)
Xcode 项目中经常会融合一些老的代码,它们可能采用非ARC的模式.混合编译时,就会碰到编译出错的情况. 如何共用ARC模式和非ARC模式呢? XCode除了提供整个项目是否使用ARC模式的选择外, ...
- oracle11g设置归档模式和非归档模式
1.首先查看当前数据库是否处于归档模式 可使用如下两种方式查看 1.1 select name, log_mode from v$database; log_mode的值为 ...
- Oracle之归档模式与非归档模式
归档模式和非归档模式 在DBA部署数据库之初,必须要做出的最重要决定之一就是选择归档模式(ARCHIVELOG)或者非 归档模式(NOARCHIVELOG )下运行数据库.我们知道,Oracle 数据 ...
- Oracle归档模式和非归档模式的区别
一.查看oracle数据库是否为归档模式: Sql代码1.select name,log_mode from v$database; NAME LOG_MODE ------------------ ...
- Oracle归档模式与非归档模式设置
(转自:http://www.cnblogs.com/spatial/archive/2009/08/01/1536429.html) Oracle的日志归档模式可以有效的防止instance和dis ...
- 怎样将Oracle数据库设置为归档模式及非归档模式
怎样将Oracle数据库设置为归档模式及非归档模式 1.Oracle日志分类 分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和 redo lo ...
- MySQL MHA--故障切换模式(GTID模式和非GTID模式)
GTID和非GTID故障切换模式选择 MySQL 5.6版本引入GTID来解决主从切换时BINLOG位置点难定位的问题,MHA从0.56版本开始支持基于GTID的复制,在切换时可以采用GTID模式和非 ...
随机推荐
- java多态和继承
继承定义:子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 多态定义看了很多,都觉得不够贴切,后来在一个同学的笔记中看到了如下的定义觉得很 ...
- PHP5 的五种常用模式
PHP5 的五种常用模式. 工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合.要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程.在更改一个代码片段时,就会发生问题,系 ...
- jsfl 常用方法
//打开fla文档 fl.openDocument (JSFL_PATH+"tongzhi.fla"); //发布flash fl.getDocumentDOM().publish ...
- UI5-Fiori初学者导航
正文 你是UI5和Fiori的新手?来对地方了. 对我来说,今年是不得不“跟上时代”去提升自己ABAP世界以外的技术技能的困难的一年.幸运的是,有很多可免费获得的信息和课程可以帮你实现这个跳跃.不要等 ...
- 继承标签extend
写页面的时候,整体框架是相同的,只有content区是不同的,所以就有了继承的概念: 在content 里面加一个 {%block content%} {% endblock %} 其他框架的继承: ...
- JAVA_Class.forName
Class.forName(xxx.xx.xx) 返回的是一个类 ,作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段 --------- 首先,在java里面任何class都要 ...
- JS 打印图片
在使用window.print()进行打印时,打印的内容可能会包含图片内容,此时的图片内容不能设置为背景图片,否则将无法再打印页面显示. <!doctype html> <html& ...
- C++多态,虚函数,虚函数表,纯虚函数
1.多态性 指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作. C++支持两种多态性:编译时多态性,运行时多态性. a.编译时多态性:通过重载函数实现 ,模板(2次编译) ...
- JS封装Cookie
/* @黑眼诗人 <www.farwish.com> */<script> //设置cookie: cookie名,cookie值,天数 function setCookie( ...
- 17.泛型.md
目录 1.Generic概念 2.泛型类 2.1定义泛型类 定义泛型: 注意要点 2.2泛型类的继承 2.3类型通配符 2.4设置类型形参上下限 上限 下限 2.5泛型接口 定义方法 注意要点 3.泛 ...