XFE 技术 生活 笔记 文集

javascript严格模式的影响

🔖 javascript 👀 41 🕒 2017-12-28 👨‍🎓 戡玉

针对js严格模式会报错的编码操作进行了整理,避免不严谨的代码习惯,面向未来编程(es6+)

变量

  1. 定义八进制格式的数字
  2. 不带var的变量定义——包括函数体内的
  3. 对变量的delete操作——除非对象设置configurable为true

语句

  1. 使用with语句

对象

  1. 定义Object对象时,名字重复

函数

  1. 参数名相同
  2. 函数名.arguments,arguments.callee和arguments.caller调用
  3. 函数中带this字面量操作时
     function A(){
        this.a=1;
     }
     A.call/apply(null);    //报错--作用域对象不再自动转换为window,而是传什么是什么
     A();                   //报错--this不再自动转换为window

eval方法

  1. 在包含上下文中不再创建变量或函数,只在被求值的特殊作用域中生效
     function A(){
         eval("var x=10");//无效
         alert(x);//报错
     }
     var result = eval("var x=10, y=11; x+y");//有效

其他

  1. 应用保留字的误用
  2. 在if,else,for和switch中声明函数
  3. 违反Object.defineProperty配置的编码操作

强调

  1. 严格模式的"use strict";声明只能放在上下文第一句,否则无效
  2. 函数参数和arguments各自独立,参数值的修改变化不会反应到arguments中
  3. 正常模式下,eval语句作用域,取决于它处于全局作用域,还是函数作用域;严格模式下,eval语句本身就是一个作用域,它的生成内容只能用于eval内部