首页 > 语言 > JavaScript > 正文

Javascript 严格模式use strict详解

2024-05-06 15:26:37
字体:
来源:转载
供稿:网友

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

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

一、严格模式的使用

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

1.全局

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

2.局部

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

function fn() {  "use strict";  //some code}

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

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

"use strict";var x;delete x;//报错Delete of an unqualified identifier in strict mode.(不合格的标识符)

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

严格模式下

function fn(a,a){ "use strict";  result=a+a;  console.log(result);}fn(2,4);//Duplicate parameter name not allowed in this context(重复的参数名称在此上下文中不允许)

非严格模式下

function fn1(a,a){  "use strict";  result=a+a;  console.log(result);}fn1(2,4);//结果为8

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

"use strict"var x=089;console.log(x);//报错:Decimals with leading zeros are not allowed in strict mode.

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

严格模式下

fn(5);function fn(a){  "use strict";  a = 42;  // return a==arguments[0];//返回false  console.log(a);//结果为42  console.log(arguments[0]);//结果为5,严格模式下arguments[0]表示这个调用方法的第一个参数     (不再追踪  参数的变化,在函数内部,参数a被重新赋值为42,但arguments[0]仍然为5.)}

非严格模式下

fn(5);function fn(a){  a = 42;  // return a==arguments[0];//返回true  console.log(a);//结果为42  console.log(arguments[0]);//结果为42(追踪参数变化)}

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

"use strict";var eval=3;//报错:Unexpected eval or arguments in strict modevar argument=6;//同样报错

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

严格模式下:

"use strict";function fn(n){  if(n==0){    return 1;  }else{    return n*arguments.callee(n-1);  }}console.log(fn(5));//报错

非严格模式下:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选