JavaScript(十四)函数的严格模式的详细

本文探讨了ES6中的新特性,如剩余操作符、解构赋值和默认参数在严格模式下的使用限制。ES7规定,使用这些特性的函数内部不能使用严格模式。此外,严格模式下eval()不再在包含作用域创建变量或函数,而是存在于一个临时作用域。同时,严格模式禁止将eval和arguments作为标识符。这些改变提高了代码的安全性和解析效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 函数参数

ES6 增加了剩余操作符、解构操作符和默认参数,为函数组织、结构和定义参数提供了强大的支持。
ECMAScript 7 增加了一条限制,要求使用任何上述先进参数特性的函数内部都不能使用严格模式,否则会抛出错误。不过,全局严格模式还是允许的。

// 可以
function foo(a, b, c) { 
 "use strict"; 
} 
// 不可以
function bar(a, b, c='d') { 
 "use strict"; 
} 
// 不可以
function baz({a, b, c}) { 
 "use strict"; 
} 
// 不可以
function qux(a, b, ...c) { 
 "use strict"; 
} 

ES6 增加的这些新特性期待参数与函数体在相同模式下进行解析。如果允许编译指示"use strict"出现在函数体内,JavaScript 解析器就需要在解析函数参数之前先检查函数体内是否存在这个编译指示,而这会带来很多问题。为此,ES7 规范增加了这个约定,目的是让解析器在解析函数之前就确切知道该使用什么模式

二、eval()

eval()函数在严格模式下也有变化。最大的变化是 eval()不会再在包含上下文中创建变量或函
数。例如:

// 使用 eval()创建变量
// 非严格模式:警告框显示 10 
// 严格模式:调用 alert(x)时抛出 ReferenceError 
function doSomething(){ 
 eval("let x = 10"); 
 alert(x); 
} 

以上代码在非严格模式下运行时,会在 doSomething()函数内部创建局部变量 x,然后 alert()
会显示这个变量的值。在严格模式下,调用 eval()不会在 doSomething()中创建变量 x,由于 x 没有
声明,alert()会抛出 ReferenceError。
变量和函数可以在 eval()中声明,但它们会位于代码执行期间的一个特殊的作用域里,代码执行
完毕就会销毁。因此,以下代码就不会出错:

"use strict"; 
let result = eval("let x = 10, y = 11; x + y"); 
alert(result); // 21 

这里在 eval()中声明了变量 x 和 y,将它们相加后返回得到的结果。变量 result 会包含 x 和 y
相加的结果 21,虽然 x 和 y 在调用 alert()时已经不存在了,但不影响结果的显示。

三、eval 与 arguments

严格模式明确不允许使用 eval 和 arguments 作为标识符和操作它们的值。例如:

// 将 eval 和 arguments 重新定义为变量
// 非严格模式:可以,没有错误
// 严格模式:抛出 SyntaxError 
let eval = 10; 
let arguments = "Hello world!"; 

在非严格模式下,可以重写 eval 和 arguments。在严格模式下,这样会导致语法错误。不能用它
们作为标识符,这意味着下面这些情况都会抛出语法错误:
 使用 let 声明;
 赋予其他值;
 修改其包含的值,如使用++;
 用作函数名;
 用作函数参数名;
 在 try/catch 语句中用作异常名称

内容概要:本文档是详尽的 Android SDK 中文帮助文档,介绍了 Android SDK 的核心概念、组件、开发环境搭建、基础开发流程及常用工具使用指南。首先解释了 Android SDK 的定义及其核心价,即提供标准化开发环境,使开发者能高效构建、测试、优化 Android 应用。接着详细列出了 SDK 的核心组件,包括 Android Studio、SDK Tools、Platform Tools、Build Tools、Android 平台版本和系统镜像。随后,文档提供了详细的环境搭建步骤,适用于 Windows、macOS 和 Linux 系统,并介绍了基础开发流程,以“Hello World”为例展示了从创建项目到运行应用的全过程。此外,还深入讲解了 ADB、AVD Manager 和 SDK Manager 等核心工具的功能和使用方法。后,文档涵盖了调试与优化工具(如 Logcat、Profiler 和 Layout Inspector)、关键开发技巧(如多版本 SDK 兼容、Jetpack 库的使用和资源文件管理)以及常见问题的解决方案。 适合人群:具有初步编程知识,希望深入了解 Android 应用开发的开发者,尤其是新手开发者和有定经验但需要系统化学习 Android SDK 的技术人员。 使用场景及目标:①帮助开发者快速搭建 Android 开发环境;②指导开发者完成基础应用开发,理解核心工具的使用;③提高开发效率,掌握调试与优化技巧;④解决常见开发过程中遇到的问题。 阅读建议:此文档内容全面且实用,建议读者按照章节顺序逐步学习,结合实际开发项目进行练习,尤其要注意动手实践环境搭建和基础开发流程,同时参考提供的扩展学习资源,进步提升开发技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张清悠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值