On this page
javascript
严格模式限制特性
使用’use strict’指令会触发哪些JavaScript行为的变更?请列举五个严格模式下的限制性规则,并说明为什么在函数内部使用严格模式时需要考虑作用域问题?
考察点分析
本题主要考察以下核心能力:
- 语言规范理解:对ES5严格模式特性的掌握程度
- 作用域机制:理解严格模式的作用域边界及声明位置要求
- 错误预防意识:识别严格模式如何修正松散模式的危险特性
具体技术评估点:
- 严格模式下的变量声明规则
- 语法限制(如重复参数、with语句)
- this绑定的变化
- 对象属性操作限制
- 严格模式的作用域生效规则
技术解析
关键知识点
变量声明限制 > 语法约束 > this绑定变化 > 属性操作限制 > 作用域机制
原理剖析: 严格模式通过变更解析/执行规则消除JS不安全操作。例如未声明变量直接赋值会抛出
ReferenceError
,而非创建全局变量。函数参数重复会触发语法错误,避免逻辑歧义。非方法调用时this指向undefined
,防止意外修改全局对象。常见误区:
- 认为严格模式是块级作用域(实际为函数/文件级)
- 误将
'use strict'
声明放在非首行导致失效 - 混淆严格模式下的delete操作限制
问题解答
使用'use strict'
后主要行为变更包括:
- 变量必须声明:未通过
var/let/const
声明的变量赋值将报错 - 禁止重复参数:函数参数同名会触发语法错误
- 禁用with语句:无法通过
with
扩展作用域链 - 安全this绑定:全局作用域/普通函数的
this
为undefined
- 不可删除限制:删除不可配置属性会抛出
TypeError
在函数内部使用时必须确保:
'use strict'
必须是函数体的首个语句- 作用域仅限当前函数及其嵌套函数
- 避免与外部作用域的严格模式声明冲突
深度追问
严格模式如何影响eval?
- 创建独立作用域,eval内声明变量不泄漏
如何检测当前是否处于严格模式?
- 通过
this
是否为undefined判断
- 通过
对象字面量重复属性如何处理?
- ES5严格模式禁止,ES6+非严格模式允许(最后值覆盖)
Last updated 06 Mar 2025, 13:07 +0800 .