关键要点
- JavaScript 函数是可重复调用的代码块,用于执行任务或计算值。
- 函数可以通过声明(如
function name() {}
)或表达式(如const func = function() {}
)定义。 - 函数支持参数传递,包括默认参数和剩余参数。
- 函数有自己的作用域,内部变量为局部变量。
- 闭包允许内部函数访问外部函数的变量。
- 箭头函数提供简洁语法,适合简单操作。
函数的定义
JavaScript 函数是一段可重复调用的代码,用于执行特定任务或计算值。函数可以接受输入(参数)和返回输出(返回值),类似于过程,但必须与输入有明显关系。
定义方式
- 函数声明:使用
function
关键字定义,语法为function name(parameters) { code }
。例如:
function square(number) {
return number * number;
}
函数声明会被提升,可以在定义前调用。
- 函数表达式:将函数赋值给变量,可以是匿名函数或命名函数(用于递归)。例如:
const square = function(number) {
return number * number;
};
函数表达式不会被提升,必须在定义后调用。
- 自调用函数:函数表达式可以立即执行,例如:
(function() {
var x = "Hello!!";
})();
参数与返回值
- 函数可以接受参数,参数是按值传递的,但对象和数组是引用类型,修改会影响外部。
- 使用
return
语句返回值,若无return
,默认返回undefined
。
函数作用域与闭包
- 函数有自己的作用域,内部变量为局部变量,仅在函数内有效。例如:
function myFunction() {
var carName = "Volvo";
console.log(carName); // 输出 "Volvo"
}
- 闭包是函数与其词法环境的组合,内部函数可以访问外部函数的变量。例如:
function makeFunc() {
var name = "Mozilla";
function displayName() {
console.log(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc(); // 输出 "Mozilla"
箭头函数
箭头函数(ES6 引入)提供简洁语法,不绑定自己的 this
,适合简单操作。例如:
const a3 = a.map((s) => s.length);
- 单参数可省略括号:
x => x * 2
- 无参数需用空括号:
() => console.log("Hello")
- 单行返回可省略
return
:x => x * 2
高级特性
- 函数是一等公民,可以像值一样传递、返回和赋值。例如:
function myFunction(a, b) {
return a * b;
}
var x = myFunction(4, 3); // x 为 12
- 支持递归,如计算阶乘:
function factorial(n) {
if (n === 0) return 1;
return n * factorial(n - 1);
}
factorial(5); // 返回 120
- 内置函数如
eval()
、isFinite()
等,详见 MDN Web Docs: Global Objects。
调查笔记:JavaScript 函数的详细分析
JavaScript 函数是语言的核心特性之一,用于组织代码、提高复用性和模块化。以下是基于权威资料的详细分析,确保覆盖所有相关信息。
函数的定义与分类
根据 MDN Web Docs,函数是可通过外部代码调用的子程序,类似于过程,但必须接受输入并返回输出。函数是头等对象(first-class objects),可以具有属性和方法,并可以被调用。
定义方式
- 函数声明:
- 语法:
function name(parameters) { code }
- 示例:
function square(number) { return number * number; }
- 特性:会被提升(hoisting),可以在定义前调用。例如:
javascript console.log(square(5)); // 输出 25 function square(number) { return number * number; }
- 来源:MDN Web Docs: Function Declarations
- 函数表达式:
- 语法:
const func = function(parameters) { code };
- 可以是匿名函数或命名函数(用于递归)。例如:
javascript const factorial = function fac(n) { return n < 2 ? 1 : n * fac(n - 1); };
- 不会被提升,必须在定义后调用。
- 来源:Runoob: JavaScript 函数表达式
- Function() 构造器:
- 使用
Function()
创建函数,但不推荐使用new
。例如:javascript var myFunction = new Function("a", "b", "return a * b"); var x = myFunction(4, 3); // x 为 12
- 来源:Runoob: Function() 构造器
- 自调用函数:
- 函数表达式可以立即执行,例如:
javascript (function() { var x = "Hello!!"; })();
- 不能用于函数声明。
- 来源:Runoob: 自调用函数
参数与返回值
- 参数传递:
- 参数按值传递,但对象和数组是引用类型,修改会影响外部。例如:
javascript function changeObj(obj) { obj.make = "Toyota"; } var mycar = { make: "Honda" }; changeObj(mycar); console.log(mycar.make); // 输出 "Toyota"
- 来源:MDN Web Docs: Parameter Passing
- 默认参数:
- ES6 引入,语法:
function name(param = defaultValue) {}
。例如:javascript function multiply(a, b = 1) { return a * b; } console.log(multiply(5)); // 输出 5
- 来源:MDN Web Docs: Default Parameters
- 剩余参数:
- 使用
...
表示,允许接受不定数量的参数。例如:javascript function multiply(multiplier, ...theArgs) { return theArgs.map(x => multiplier * x); } console.log(multiply(2, 1, 2, 3)); // 输出 [2, 4, 6]
- 来源:MDN Web Docs: Rest Parameters
- 返回值:
- 使用
return
语句返回值,若无return
,默认返回undefined
。例如:javascript function noReturn() {} console.log(noReturn()); // 输出 undefined
- 来源:W3School: Return Statement
作用域与闭包
- 作用域:
- 函数有自己的作用域,内部变量为局部变量,仅在函数内有效。例如:
javascript function myFunction() { var carName = "Volvo"; console.log(carName); // 输出 "Volvo" } myFunction(); console.log(carName); // 报错:carName 未定义
- 来源:W3School: Local Variables
- 闭包:
- 闭包是函数与其词法环境的组合,内部函数可以访问外部函数的变量。例如:
javascript function makeFunc() { var name = "Mozilla"; function displayName() { console.log(name); } return displayName; } var myFunc = makeFunc(); myFunc(); // 输出 "Mozilla"
- 闭包常用于数据私有化或保持状态。
- 来源:MDN Web Docs: Closures
箭头函数
- 箭头函数(ES6 引入)提供简洁语法,不绑定自己的
this
,适合简单操作。语法: - 单参数:
x => x * 2
- 无参数:
() => console.log("Hello")
- 多参数:
(x, y) => x + y
- 示例:
const a3 = a.map((s) => s.length);
- 特性:不能被提升,建议使用
const
定义;不支持 IE11 及更早版本。 - 来源:Runoob: 箭头函数
高级特性
- 函数作为一等公民:
- 函数可以像值一样传递、返回和赋值。例如:
javascript function myFunction(a, b) { return a * b; } var x = myFunction(4, 3); // x 为 12 var y = myFunction(4, 3) * 2; // y 为 24
- 来源:MDN Web Docs: Functions as First-Class Citizens
- 递归:
- 函数可以调用自身,用于解决复杂问题。例如,计算阶乘:
javascript function factorial(n) { if (n === 0) return 1; return n * factorial(n - 1); } console.log(factorial(5)); // 输出 120
- 来源:MDN Web Docs: Recursion
- 内置函数:
- JavaScript 提供了一些全局函数,如
eval()
、isFinite()
、isNaN()
、parseFloat()
、parseInt()
、encodeURI()
等。 - 示例:
parseInt("10")
返回 10。 - 注意:
escape()
和unescape()
已弃用。 - 来源:MDN Web Docs: Global Objects
总结表
以下是 JavaScript 函数关键特性的总结表:
特性 | 描述 |
---|---|
定义方式 | 声明(function )、表达式、构造器、自调用 |
参数传递 | 按值传递,对象/数组为引用类型 |
默认参数 | ES6 引入,param = defaultValue |
剩余参数 | 使用 ... ,接受不定数量参数 |
作用域 | 函数有独立作用域,内部变量为局部 |
闭包 | 内部函数访问外部变量,形成词法环境引用 |
箭头函数 | 简洁语法,无 this ,不支持提升 |
一等公民 | 可传递、返回、赋值 |
递归 | 函数自调用,解决复杂问题 |
内置函数 | 如 eval() 、parseInt() ,部分已弃用 |
信息来源与可靠性
本文信息基于以下权威资料,确保准确性和全面性:
- MDN Web Docs: Functions 提供了官方文档,涵盖所有函数特性。
- Runoob: JavaScript 函数定义 提供了教程式解释,适合初学者。
- W3School: JavaScript 函数 提供了基础教程,包含示例。
这些资料一致性高,涵盖了 ES6 及以上版本的最新特性,确保信息的时效性。