JavaScript的函数严格模式

简介: 首先,严格模式要求命名函数参数必须唯一。看下面的例子:

一、函数

首先,严格模式要求命名函数参数必须唯一。看下面的例子:

// 命名参数重名
// 非严格模式:没有错误,只有第二个参数有效
// 严格模式:抛出 SyntaxError 
function sum (num, num){
    
 // 函数代码
}

在非严格模式下,这个函数声明不会抛出错误。这样可以通过名称访问第二个 num,但只能通过
arguments 访问第一个参数arguments 对象在严格模式下也有一些变化。在非严格模式下,修改命名参数也会修改 arguments
对象中的值。而在严格模式下,命名参数和 arguments 是相互独立的。例如:

// 修改命名参数的值
// 非严格模式:arguments 会反映变化
// 严格模式:arguments 不会反映变化
function showValue(value){
    
 value = "Foo"; 
 alert(value); // "Foo" 
 alert(arguments[0]); // 非严格模式:"Foo" 
 // 严格模式:"Hi" 
} 
showValue("Hi");

在这个例子中,函数 showValue()有一个命名参数 value。调用这个函数时给它传入参数"Hi",
该值会赋给value。在函数内部,value被修改为"Foo"。在非严格模式下,这样也会修改arguments[0]
的值,但在严格模式下则不会。
另一个变化是去掉了 arguments.callee 和 arguments.caller。在非严格模式下,它们分别引
用函数本身和调用函数。在严格模式下,访问这两个属性中的任何一个都会抛出 TypeError。例如:

// 访问 arguments.callee 
// 非严格模式:没问题
// 严格模式:抛出 TypeError 
function factorial(num){
    
 if (num <= 1) {
    
 return 1; 
 } else {
    
 return num * arguments.callee(num-1) 
 } 
} 
let result = factorial(5);

类似地,读或写函数的 caller 或 callee 属性也会抛出 TypeError。因此对这个例子而言,访问
factorial.caller 和 factorial.callee 也会抛出错误。
另外,与变量一样,严格模式也限制了函数的命名,不允许函数名为 implements、interface、
let、package、private、protected、public、static 和 yield。
关于函数的最后一个变化是不允许函数声明,除非它们位于脚本或函数的顶级。这意味着在 if 语句中声明的函数现在是个语法错误// 在 if 语句中声明函数

// 非严格模式:函数提升至 if 语句外部
// 严格模式:抛出 SyntaxError 
if (true){
    
 function doSomething(){
    
 // ... 
 } 
}

所有浏览器在非严格模式下都支持这个语法,但在严格模式下则会抛出语法错误

目录
相关文章
|
1月前
|
JavaScript 前端开发 Java
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
本文介绍了JavaScript中常用的函数和方法,包括通用函数、Global对象函数以及数组相关函数。详细列出了每个函数的参数、返回值及使用说明,并提供了示例代码。文章强调了函数的学习应结合源码和实践,适合JavaScript初学者和进阶开发者参考。
42 2
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
|
1月前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
|
2月前
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是使用 `function` 关键词定义的代码块,可在调用时执行特定任务。函数可以无参或带参,参数用于传递值并在函数内部使用。函数调用可在事件触发时进行,如用户点击按钮。JavaScript 对大小写敏感,函数名和关键词必须严格匹配。示例中展示了如何通过不同参数调用函数以生成不同的输出。
|
2月前
|
存储 JavaScript 前端开发
JS函数提升 变量提升
【10月更文挑战第6天】函数提升和变量提升是 JavaScript 语言的重要特性,但它们也可能带来一些困惑和潜在的问题。通过深入理解和掌握它们的原理和表现,开发者可以更好地编写和维护 JavaScript 代码,避免因不了解这些机制而导致的错误和不一致。同时,不断提高对执行上下文等相关概念的认识,将有助于提升对 JavaScript 语言的整体理解和运用能力。
|
2月前
|
JavaScript 前端开发
js教程——函数
js教程——函数
44 4
|
2月前
|
存储 JavaScript 前端开发
js中函数、方法、对象的区别
js中函数、方法、对象的区别
21 2
|
2月前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
28 5
|
2月前
|
JavaScript 前端开发
Node.js 函数
10月更文挑战第5天
24 3
|
2月前
|
前端开发 JavaScript
探索JavaScript函数基础
探索JavaScript函数基础
20 3
|
2月前
|
存储 JavaScript 前端开发
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
44 0