zoukankan      html  css  js  c++  java
  • JavaScript 严格模式

    严格模式:“use strict”

      【1】使用方式是将“use strice”字符串放入脚本代码中, 放在顶部表明整个脚本启用严格模式,放在某函数体(函数声明)内的第一行,则指定该函数执行严格模式,其余脚本代码不受影响。

      【2】不支持strict模式的浏览器会把“use strict”当做一个字符串语句执行,支持strict模式的浏览器将开启严格模式

      【3】IE10+ 支持严格模式

      【4】消除js语法的一些不合理、不严谨、不安全问题,减少怪异行为并保证代码运行安全,提高编译器效率,增加运行速度

    严格模式下的十大规则:

      【1】变量:【a】不允许意外创建全局变量(未定义的变量) 【b】不能对变量调用delete操作符

    "use strict"
    [a]
    message = 'hello world!';
    [b]
    var color = ''red;
    delete color; // delete 删除变量

      【2】对象:【a】不能为只读属性赋值【b】不能为不可配置的属性使用delete操作

    "use strict"
    var person = {
      name: 'cook',
    };
    // Object.defineProperty(obj, key, descriptor) 设置对象某个属性的描述符(value, 读,写是否可被遍历)
    // 注意:使用该方法时,所有描述符皆默认为false,但创建变量时,变量的描述符皆默认为true---值只能是布尔类型的描述符。
    Object.defineProperty(person, 'name', { writable: false, // 属性是否可被赋值运算修改 configurable: false, // 属性描述符是否可被修改,属性是否可被删除 }); //[a] person.name = 'Nicholas'; //[b] delete person.name

      【3】函数:【a】参数必须唯一  【b】修改形参不会反映到arguments中 【c】不允许使用arguments.callee和arguments.caller 【d】 不允许函数内部遍历调用栈(查阅)

    "use strict"
    【a】
    function sum(num,num){}
    
    【b】
    // arguments 存储的实际是传递给函数的参数(实参),而不是函数声明的参数(形参)。这句话在严格模式被更为贴切的执行。
      //小技巧 使用instanceo判断arguments是否是数组,答案是否,它是一个类似数组(类数组)的集合。
    funciton showValue(value) {
      value = "Foo";
      alert(arguments[0]); // Hi
      alert(value); // Foo
    }
    showValue('Hi');
    【c】
    // callee 正被执行的function对象;caller保存调用该函数的函数,如果没有,则为null。
    function outer() {
      inner();
      return argumnets.callee(num);
    }
    function inner() {
      alert(inner.caller());
    }
    outer();
    【d】
    function f1() {
    f1.caller;
    f1.arguments;
    return arguments.callee;
    }

      【4】严格模式下,eval()语句本身成为一个单独的作用域,它所生成的变量只能用于eval内部。

    "use strict"
    // eval() 将字符串转化为 html,并自动执行
    function () {
      eval("var x = 10");
      alert(x);
    }
    eval("var y = 20");
    alert(y);
    
    // 允许以下操作
    var result = eval("var x = 10, y = 11; x+y");
    alert(result); //21

      【5】不允许使用eval和arguments作为标识符(保留字也不可以),也不允许读写他们的值

    "use strict"
    // 用来承载数据的变量,我们将其称为标识符
    var eval = 10;
    var arguments = 20
    // 保留字: implements,interface,let,package,private,protected,public,static,yield

      【6】 静止使用with语句

    "use strict"
    // 将'{}'内的this指向'()'内的对象---将代码的作用域设置到一个特定的作用域。 var v = 1; with (o) { // 语法错误 v = 2; }

       【7】禁止this关键字指向全局对象

    "use strict"
    // 非严格模式下 此this指向window
    var color = "red";
    function fn() {
      alert(this.color); // 等用于undefined.color 报错
    }
    fn();

       【8】禁止八进制表示法

    "use strict";
    var n = 0100; // 语法错误

       【9】函数必须声明在顶层

    "use strict"
    if (true) {
      function f() {}
    }
    for (var i = 0; i < 5; i++) {
      function f2() {}
    }

      ES6引入“块级作用域”。为了与ES6接轨,严格模式只允许在全局作用域或函数作用域的顶层声明函数;不允许在代码块内声明函数。

    代码出至: 小火柴的蓝色理想

  • 相关阅读:
    [笔记] Delphi 10.2.1 Tokyo 安装使用笔记
    [控件] Firemonkey 跨平台 Toast
    [iOS] Edit / Memo 原生控件才提供拼字检查
    [外观] Firemonkey Windows Hint 气球样式
    SQL实现value为1,2,3转换为值
    关于python的一些坑
    Python JSON
    python 字典拷贝
    python 日期、时间、字符串相互转换
    python获取cookie的方法
  • 原文地址:https://www.cnblogs.com/wssjzw/p/9358992.html
Copyright © 2011-2022 走看看