Javascript 严格模式use strict详解

前端之家收集整理的这篇文章主要介绍了Javascript 严格模式use strict详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

严格模式:由ECMA-262规范定义的JavaScript标准,对javascrip的限制更强。

(非严格的模式,被称为“马虎模式/稀松模式/懒散模式”。)

一、严格模式的使用

严格模式可以在脚本或函数级别实现。(即全局和局部模式)

1.全局

在js文件的最前面添加 "use strict"

2.局部

函数内部添加 "use strict",如下

二、严格模式和非严格模式的对比

1.严格模式下,无法删除(delete)变量(delete是不合格的标识符))。非严格模式下会删除失败返回false

2.严格模式中,函数形参存在同名的,抛出错误; 非严格模式不会

严格模式下

名称在此上下文中不允许)

非严格模式下

3.严格模式不允许八进制整数直接量(如下)。非严格模式下不会报错。

4.严格模式中,arguments对象是传入函数内实参列表的静态副本(即不再追踪参数的变化);非严格模式下,arguments对象里的元素和对应的实参是指向同一个值的引用。

严格模式下

调用方法的第一个参数 (不再追踪 参数的变化,在函数内部,参数a被重新赋值为42,但arguments[0]仍然为5.) }

非严格模式下

}

5.严格模式中 eval和arguments当做关键字,它们不能被赋值和用作变量声明

6.严格模式会限制对调用栈的检测能力,访问arguments.callee,arguments.callee.caller会抛出异常

严格模式下:

非严格模式下:

caller:在一个函数调用另一个函数时,被调用函数自动生成一个caller属性,指向调用它的函数对象。如果该函数当前未被调用,或并非被其他函数调用

则caller为null。如下:

严格模式下:

非严格模式下:

调用它的函数(fn2) console.log(n1); } function fn2() { fn1(); } fn2();// 结果打印出:function fn2(){ fn1( ) };

7.严格模式变量必须先声明,直接给变量赋值,不会隐式创建全局变量,不能用with。

严格模式下

解释:道运行脚本时,首先是编译,然后再执行。显然在编译的时候,所以就不能在编译时确定with语句块中的变量到底归属哪个对象。[with语句块中的变量是(cl)的属性

还是上一层变量作用域链中的变量。]。只能在执行时才能确定(c1)是Clothes的一个实例。这与严格模式有编译时就检查变量是否定义冲突,所以严格模式不会with语句的使用。

扩展:with语句的使用(用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性。)

代码块 } eg:function Clothes(){ this.color="red"; this.size="m"; this.price="cheap"; } var c1=new Clothes(); with(c1){ var str="颜色:"+color+",尺寸:"+size+",价格:"+price; document.write(str); }//结果(颜色:red,尺寸:m,价格:cheap)

严格模式中 call apply传入null undefined保持原样不被转换为window

总结

以上所述是小编给大家介绍的Javascript 严格模式use strict详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言小编会及时回复大家的!

猜你在找的JavaScript相关文章