}
在上述代码中,我们定义了一个名为sayHello的函数,它接受一个参数name,当调用该函数时,会在控制台输出"Hello, "加上传入的name值。
3. 带返回值的函数:
function add(a, b) {
return a + b;
}
在上述代码中,我们定义了一个名为add的函数,它接受两个参数a和b,并返回它们的和。
### 二、作用域和闭包的概念
作用域是指变量在代码中的可见性和生命周期。在JavaScript中,有全局作用域和局部作用域的概念。闭包是指函数可以访问其外部作用域中的变量。
1. 全局作用域:
全局作用域中定义的变量可以在整个代码中访问。例如:
var name = “John”; // 全局变量
function sayName() {
console.log(“My name is " + name);
}
sayName(); // 输出"My name is John”
在上述代码中,我们在全局作用域中定义了一个变量name,然后在函数sayName中访问了该变量。
2. 局部作用域:
局部作用域中定义的变量只能在其所在的代码块中访问。例如:
function sayName() {
var name = “John”; // 局部变量
console.log(“My name is " + name);
}
sayName(); // 输出"My name is John”
console.log(name); // 报错,name变量在全局作用域中不可见
在上述代码中,变量name在函数sayName的局部作用域中定义,只能在该函数中访问。
3. 闭包:
闭包的基本示例:
function outer() {
var x = 10; // 外部变量
function inner() {
console.log(x); // 访问外部变量x
}
return inner;
}
var closure = outer(); // 创建闭包
closure(); // 输出10
在上述代码中,函数outer内部定义了一个函数inner,并返回inner函数。在这个闭包中,inner函数可以访问外部作用域中的变量x。
闭包实现私有变量:
function counter() {
var count = 0; // 私有变量
function increment() {
count++;
console.log(count);
}
function decrement() {
count–;
console.log(count);
}
return {
increment: increment,
decrement: decrement
};
}
var counterObj = counter(); // 创建一个计数器对象
counterObj.increment(); // 输出1
counterObj.increment(); // 输出2
counterObj.decrement(); // 输出1
在上述代码中,函数counter内部定义了两个函数increment和decrement,并返回一个包含这两个函数的对象。这样,我们可以通过counterObj来访问和操作私有变量count。
### 三、例子
1. 计算阶乘:
function factorial(n) {
if (n === 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
var result = factorial(5); // 计算5的阶乘
console.log(result); // 输出120
在上述代码中,我们使用递归的方式计算一个数的阶乘。
2. 求和:
function sum(numbers) {
var total = 0;
for (var i = 0; i < numbers.length; i++) {
total += numbers[i];
}
return total;
}
var numbers = [1, 2, 3, 4, 5];
var result = sum(numbers); // 计算数组的和
console.log(result); // 输出15
在上述代码中,我们定义了一个函数sum,它接受一个数组参数numbers,并返回数组中所有元素的和。
本文介绍了JavaScript函数的定义、参数和返回值,以及作用域和闭包的概念。函数和作用域是JavaScript编程中非常重要的概念,它们可以帮助我们组织代码并实现复杂的逻辑。通过多个例子的演示,希望读者能够更好地理解和运用这些概念。如果想要进一步学习和探索JavaScript函数和作用域,建议查阅相关的文档和教程。