js的严谨模式
一.怎么用
<script type="text/javascript">
"use strict"; //放在脚本文件第一行,整个脚本将以“严格模式运行”。如果这行语句不在第一行,则无效,整个脚本以"普通模式"运行
</script>
也可以将它放在某个函数体内,但是也要放在第一行,则整个函数以“严格模式”运行
二.如果多人协作开发,有好几个函数,但是我想用严谨模式,别人没用,那怎么办?
用一个匿名函数
(function(){
"use strict";
})();
三.严格模式和普通模式的区别
1.严谨模式下,变量必须通过var声明,否则会报错
2.严谨模式下,不能使用with关键字,会报错 (with关键字平时也少用,运行时特别是在ie下可能会存在内存泄露的情况,会导致js运行起来很慢)
3.严格模式下多了一种作用域,普通模式下两种作用域:全局作用域和函数作用域。严谨模式下,多了一种eval作用域,eval可以把字符串变成真正的js去运行。
普通模式下eval语句的作用域,取决他处于全局作用域,还是处于函数作用域,严格模式下,eval语句本身就是一个作用域,不能够再生成全局变量了,它所生成的变量只能用于eval内部
普通模式下
eval("var x=20;");
alert(x); //弹出20
若改成
var a=function(){
eval("var x=20;");
}
a();
alert(x);
输出x没有定义
eval("var x=20;alert(x);")
alert(x);
普通模式下,弹出两次20
严谨模式下,就第一次弹出20,第二次未定义
4.严谨模式下,禁止this关键字指向全局对象,即构造函数只要不通过new实例化对象,那么就会直接报错
5.严谨模式下,为了让代码更安全,禁止在函数内部遍历调用栈
如
var fn=function(){
alert(fn.arguments.length);
};
fn(12,34);
普通模式下,输出2,严谨模式下报错
6.严谨模式下,为了让代码更安全,禁止删除变量
平时也无法删除变量(用delete),但不会报错(delete能删除对象中的元素)
严谨模式下,用delete删除变量会报错
7.普通模式下,对一个对象的只读属性赋值,不会报错,只会默默地失败(赋值不上)。严谨模式下会报错
8.严谨模式下,对禁止扩展的对象添加新属性,会报错
如
var o={};
o.x=100;
Object.preventExtensions(o);
o.y=200;
console.log(o);
会报错,x属性可以添加上去
普通模式下,虽然y也添加不上去,但不会报错
9.普通模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值,严格模式下属于语法错误
10.普通模式下,如果函数有多个重名参数,可以通过arguments[i]读取,严格模式下有多个重名参数属于语法错误
11.禁止八进制数表示法,普通模式下,整数第一位如果是0,表示这是八进制数,严谨模式下,整数第一位是0将报错
12.严谨模式下对arguments对象的限制
①不允许对arguments赋值
②arguments不再追踪参数的变化
var fn=function(num){
num+=100;
alert(num);
alert(arguments[0]);
}
fn(100);
普通模式下输出200,200
严谨模式下输出200,100
③禁止使用arguments.callee这意味着,我们无法在匿名函数内部调用自身(没办法递归)
13.严谨模式下,函数声明必须在全局作用域或函数作用域的顶层,不允许在非函数代码块内声明函数
如
var a=6;
if(a>5){
function a(){
alert("严格模式下,我不应该在这里声明"); //但是匿名函数可以
}
fn();
}
14.严谨模式下,不能使用一些关键字,但是为了向将来的js新版本过渡,还是增加了一些保留字
优点
js代码可以写的更严谨,更完善,更安全
js的严谨模式的更多相关文章
- Js 职责链模式 简单理解
js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...
- 【转】EXT JS MVC开发模式
原文链接:EXT JS MVC开发模式 在app(亦即根目录)文件夹下面创建controller.model.store和view文件夹,从名称上就知道他们该放置什么代码了吧.然后创建Applicat ...
- js中State模式的解析及运用
状态模式,在大的范畴中的定义为当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类.每种编程语言有不同的实现方式,运用的范围也多用于游戏之中. 这里我用javascript来模拟状 ...
- js的严格模式详解
什么是js的严格模式? 严格模式指的是使js在更为严格的条件下运行.严格模式的主要作用是规范我们写代码习惯,以及为js升级做好铺垫. 如何使用严格模式? <script> //直接在代码 ...
- JS的异步模式
JS的异步模式:1.回调函数:2.事件监听:3.观察者模式:4.promise对象 JavaScript语言将任务的执行模式可以分成两种:同步(Synchronous)和异步(Asychronous) ...
- JavaScript---正则使用,日期Date的使用,Math的使用,JS面向对象(工厂模式,元模型创建对象,Object添加方法)
JavaScript---正则使用,日期Date的使用,Math的使用,JS面向对象(工厂模式,元模型创建对象,Object添加方法) 一丶正则的用法 创建正则对象: 方式一: var reg=new ...
- 关于js的严格模式
最近在看你不知道js,补充自己的js基础,加深理解.在读的过程中写点笔记. 严格模式下与非严格模式的区别 . 严格模式是es5新增的,es6是默认为严格模式的!js默认状态下是非严格模式的! 一般 ...
- 如何做JS 单体模式的设计---->>js设计模式<<-------单体模式
1. 单体模式是js中最基本 单最有用的模式之一,非常常用. 单体模式的基本结构如下: var Person = { name: 'lilu', age:', sayHi: function(){ a ...
- 由项目浅谈JS中MVVM模式
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1. 背景 最近项目原因使用了durandal.js和knock ...
随机推荐
- UC打通高德POI数据,用大数据描绘周边热点地图
UC打通高德POI数据,用大数据描绘周边热点地图 2016-10-25 11:13 来源:互联网 我来投稿 我要评论 在北京工作的小李最近很苦恼,房东因小区周边规划了大型商场而坚持涨价. ...
- adb_常用命令
1. adb push 电脑中的文件(包含路径) Android中的绝对路径 2. adb pull Android中的绝对路径文件 电脑中的绝对路径 3. adb install ??.ap ...
- HTML5时代的Web缓存机制
HTML5 之离线应用Manifest 我们知道,使用传统的技术,就算是对站点的资源都实施了比较好的缓存策略,但是在断网的情况下,是无法访问的,因为入口的HTML页面我们一般运维的考虑,不会对其进行缓 ...
- IO端口、IO内存、IO空间、内存空间的含义和联系
1,IO空间:X86一个特有的空间,与内存空间独立的空间,同样利用IO空间可以操作数据,只不过是利用对应的IO端口操作函数,例如inb(), inbw(), inl(); outb(), outw() ...
- linux查看文件夹大小
du -sh 查看当前文件夹大小 du -sh * | sort -n 统计当前文件夹(目录)/文件的大小,并按文件大小排序 ------------------------------------- ...
- HTML JSP Servlet 的 相对路径 绝对路径
HTML 相对路径 - 没有最前面的 /: 相对于当前文件,和OS一样 绝对路径 - 前面带 / : 相对于 http://<host>:port/ Servlet 相对路径 - 相对于 ...
- 启动一个新的activity并携带数据,返回数据给上一个activity
一.在启动一个新的activity的时候可以通过Intent携带数据,通过Intent.putExtra()方法通过键值对的形势装入数据.在新启动的activity中通过 getI ...
- php 注入
SELECT * FROM `users` WHERE name = 'a\'b\'d' LIMIT 0 , 30 这个是有结果的,运行正确的,和一般想的不一样,单引号里面可以套单引号,只要里面的单引 ...
- java 集合4(迭代器)
迭代器使用要注意的问题: 1.迭代器在遍历元素的时候注意事项: 在迭代器迭代元素的过程中,不准使用集合对象改变集合中的元素个数, 如果要添加或删除要用迭代器的方法. 2.如果使用类集合对象改变集合中的 ...
- [翻译]了解ASP.NET底层架构(八)
原文地址:http://www.cnblogs.com/tmfc/archive/2006/09/04/493304.html [翻译]了解ASP.NET底层架构(完) [翻译]了解ASP.NET底层 ...