严格模式和非严格模式的区别
'use strice';
var n = 1;
var foo = function(){...};
var n = 1;
var foo = function(){
'use strict';
}
- 严格模式下, delete运算符后跟随非法标识符(即delete 不存在的标识符),会抛出语法错误; 非严格模式下,会静默失败并返回false
- 严格模式中,对象直接量中定义同名属性会抛出语法错误; 非严格模式不会报错
- 严格模式中,函数形参存在同名的,抛出错误; 非严格模式不会
- 严格模式不允许八进制整数直接量(如:023)
- 严格模式中,arguments对象是传入函数内实参列表的静态副本;非严格模式下,arguments对象里的元素和对应的实参是指向同一个值的引用
- 严格模式中 eval和arguments当做关键字,它们不能被赋值和用作变量声明
- 严格模式会限制对调用栈的检测能力,访问arguments.callee.caller会抛出异常
- **严格模式 变量必须先声明,直接给变量赋值,不会隐式创建全局变量,不能用with, **
- 严格模式中 call apply传入null undefined保持原样不被转换为window
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步