考察点分析

本题主要考察以下核心能力:

  • 语言规范理解:对ES5严格模式特性的掌握程度
  • 作用域机制:理解严格模式的作用域边界及声明位置要求
  • 错误预防意识:识别严格模式如何修正松散模式的危险特性

具体技术评估点:

  1. 严格模式下的变量声明规则
  2. 语法限制(如重复参数、with语句)
  3. this绑定的变化
  4. 对象属性操作限制
  5. 严格模式的作用域生效规则

技术解析

关键知识点

  1. 变量声明限制 > 语法约束 > this绑定变化 > 属性操作限制 > 作用域机制

  2. 原理剖析: 严格模式通过变更解析/执行规则消除JS不安全操作。例如未声明变量直接赋值会抛出ReferenceError,而非创建全局变量。函数参数重复会触发语法错误,避免逻辑歧义。非方法调用时this指向undefined,防止意外修改全局对象。

  3. 常见误区

  • 认为严格模式是块级作用域(实际为函数/文件级)
  • 误将'use strict'声明放在非首行导致失效
  • 混淆严格模式下的delete操作限制

问题解答

使用'use strict'后主要行为变更包括:

  1. 变量必须声明:未通过var/let/const声明的变量赋值将报错
  2. 禁止重复参数:函数参数同名会触发语法错误
  3. 禁用with语句:无法通过with扩展作用域链
  4. 安全this绑定:全局作用域/普通函数的thisundefined
  5. 不可删除限制:删除不可配置属性会抛出TypeError

在函数内部使用时必须确保:

  • 'use strict'必须是函数体的首个语句
  • 作用域仅限当前函数及其嵌套函数
  • 避免与外部作用域的严格模式声明冲突

深度追问

  1. 严格模式如何影响eval?

    • 创建独立作用域,eval内声明变量不泄漏
  2. 如何检测当前是否处于严格模式?

    • 通过this是否为undefined判断
  3. 对象字面量重复属性如何处理?

    • ES5严格模式禁止,ES6+非严格模式允许(最后值覆盖)

Last updated 06 Mar 2025, 13:07 +0800 . history