开发中的严格模式

js中有严格模式和非严格模式两种运行环境

  • 在开发中,有非严格模式和严格模式2种开发模式

  • 在严格模式下,会做更加严格的语法检查,以前在非严格模式下可以使用的一些语句,在严格模式下直接报错或者抛出异常

  • 开启严格模式 : "use strict";

  • 如果浏览器支持严格模式就会开启严格模式,如果不支持,'use strict'作为一段字符串忽略处理

实现严格模式:只需要在脚本代码中添加上上述关键字即可。 关键字具体说明

  • (1) 注意区分大小写,必须全部都是小写的
  • (2) 注意空格,整个字符串总共10个字符
  • (3) 单引号和双引号无所谓,但是需要有双引号
  • (4) 必须写在作用域的最顶部,注意其位置
  • (5) 可以加分号,也可以不加,但是必须是一个字符串

      //"use strict";   //正确写法

      //"use strict"    //正确写法     分号可以省略

       //'use strict';   //正确写法     可以使用单引号
      //"use  strict";    //错误写法   必须是10个字符
      //"use Strict";     //错误写法   所有的字符都必须小写

**作用范围**

① 函数的顶部(只对当前的函数有效)

② script标签的顶部,只对当前的标签有效,对页面中其他的script无效

代码示例


    //位置01       对func01和func02都有效
    //"use strict";

    function func01() {
        //位置02   对func01有效,对func02无效
        //"use strict";
        a = 10;
        console.log(a);
    }

    function func02() {
        //位置03 对func02有效,但对func01无效
       //"use strict";
        b = 20;
        console.log(b);
    }

    func01();
    func02();


# 严格模式使用注意

**常见的几种**

* ① 所有的变量必须使用var 关键字声明
* ② 不能使用delete关键字删除全局变量 ,以前默认删除失败,严格模式下直接报错
* ③ 在对象中不允许有同名的属性
* ④ 函数的参数必须唯一(不能出现同名的参数)
* ⑤ arguments对象的行为不同,在非严格模式下修改形参的值会反映到arguments中,而严格模式下则相对独立
* ⑥ 禁用了argument.callee和caller函数,他们一个引用函数本身,一个引用调用函数
* ⑦ 不能在if语句中声明函数
* ⑧ 禁止使用eval和arguments作为标识符
* ⑨ 修正this的值,在严格模式下,函数this的值始终是指定的值,无论指定的是什么值。
* 10 禁用了with语句
* 11 去掉了JavaScript中的八进制字面量(以0开头的八进制字面量是无效的语法)

① 所有的变量都必须使用var关键字声明

 a = 10;             //错误的演示
 console.log(10);

② 不能使用delete关键字删除全局变量

//在非严格模式下,删除失败(静默失败)   严格模式下直接报错
var a = 10;
delete a;
console.log(a);

③ 在对象中不允许有同名的属性

//在非严格模式下,会使用后面的属性赋值作为最终值,在严格模式下则直接报错
var obj = {
    name:"张三",
    name:"李四"
}

console.log(obj);

④ 函数的参数必须唯一(不能出现同名的参数)

//在非严格模式下,如果函数在定义的时候,使用了多个同名的参数,则在函数内部形参的实际值为最后一个传入的实参值
//在严格模式下,直接报错
//    function func(a,a,a) {
//        console.log(a);
//        console.log(arguments);
//    }

function func(a,b,c) {
    console.log(a);
    console.log(arguments);
}
func(1,2,3);

arguments对象的行为不同

说明:

(1)严格模式下,在函数内部修改了对象的指向,对arguments的值不会产生影响

(2)在严格模式下,形参的值和arguments的值是相互独立的,在函数内部修改了形参的值对arguments不受影响

(3)在非严格模式下,修改了形参的值,arguments中的数据会跟着改变

//测试引用类型的值作为函数的参数
  function funcName(obj) {
    console.log(obj);
    console.log(arguments[0]);

    //在函数内部修改形参的值
    obj = {age:20};
    console.log(obj);
    console.log(arguments[0]);
}

funcName({name:"张三"});
//测试基本类型数据作为函数的参数
function fun(str) {
    console.log(str);
    console.log(arguments[0]);
    str = "hello";
    console.log(arguments[0]);
}

fun("hi");
**⑥ 禁用了argument.callee和caller函数**

说明:

* argument.callee是对函数自身的引用
* argument.calller是对调用函数的引用


        var num = (function (n) {
            if (n ==1)
            {
                return 1;
            }

            return arguments.callee(n-1) + n;
        })(10);

        console.log(num);       

**⑦ 不能在if语句中声明函数**


* 如果在if语句中声明函数,则会产生语法错误

  
         if (true)
        {
        console.log("________");
        function demo() {
            console.log("呵呵呵呵");
        }

        demo();
        }


**⑧ 禁止使用eval和argument作为标识符**


    var eval = "测试的字符串";
    console.log(eval);

    var arguments = "参数列表";
    console.log(arguments);


**⑨ 修正this的值**

 * 在严格模式下,函数this的值始终是指定的值,无论指定的是什么值
    
        var name = "测试的name";
        function demoTest() {

        //在非严格模式下,打印出来的this为全局的对象window
        console.log(this);  //在严格模式下打印出来的this为undefined
          }

        demoTest();


**⑩ 禁用了with语句**

    var o = {name:"小狐狸",age:20};
    with(o)
    {
        name = "lisi";
        age = 48
    }
    console.log(o);

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容