JavaScript函数基础

JavaScript函数基础

1. 为什么需要函数

函数(function)是被设计为执行特定任务的代码块。通过将相同或相似逻辑的代码“包裹”起来,并通过函数调用来执行这些代码,可以有效地提升代码的复用性和开发效率。
常见的 alert()prompt()console.log() 都是 JavaScript 中内置的函数,它们被封装好供开发者直接调用使用。

总结

  1. 函数可以实现代码复用,提高开发效率。
  2. 函数本质是一个执行特定任务的代码块。

2. 函数使用

2.1 函数的声明与调用

函数的声明使用 function 关键字,语法格式如下:

function 函数名(参数1, 参数2, ...) {
    // 函数体
}

注意:声明(定义)的函数必须通过调用才会被执行。调用语法如下:

函数名();
2.2 函数的命名规范
  • 与变量命名规则一致,通常使用小驼峰式命名法。
  • 函数名前缀建议使用动词来描述其功能,如 printMessagecalculateSum 等。
2.3 函数体

函数体负责将相同或相似的代码逻辑“包裹”起来,函数内部的代码只有在调用时才会被执行。

总结

  1. 函数是用 function 关键字声明的。
  2. 声明的函数不调用不会执行,调用方式为 函数名()
  3. 函数的复用代码与循环代码的不同在于:循环代码写完即执行,而函数可以随时调用,随时执行。

3. 函数传参

3.1 参数的作用

函数可以接收外部传递的数据,通过形参与实参的方式进行传递,从而提升函数的灵活性。
例如:若函数用于求两个数的和,则可以使用如下方式传递参数:

function add(num1, num2) {
    return num1 + num2;
}

console.log(add(10, 20)); // 输出 30
3.2 形参与实参
  • 形参:在函数声明时写在函数名右侧小括号中的参数称为形参(形式上的参数)。
  • 实参:在函数调用时传入给形参的实际数据称为实参(实际上的参数)。

开发中尽量保持形参和实参个数一致,避免传参不完整导致的逻辑错误。

3.3 参数默认值

当函数声明时未传递实参时,形参的值为 undefined。为了避免这种情况,可以为形参设置默认值:

function greet(name = "Guest") {
    console.log("Hello, " + name + "!");
}

调用 greet() 时输出 Hello, Guest!,而调用 greet("Alice") 时输出 Hello, Alice!

总结

  1. 函数的参数可以极大提高函数的灵活性。
  2. 参数可以分为形参和实参,声明时的是形参,调用时的是实参。
  3. 形参可以设置默认值,避免参数缺失导致的错误。

4. 函数返回值

4.1 什么是函数返回值?

当函数执行完特定任务后,可以使用 return 关键字将结果返回给调用者。
有返回值的函数可以将内部的执行结果交给外部使用,从而提升代码的可复用性和扩展性。

例子

function multiply(a, b) {
    return a * b;
}

let result = multiply(5, 3); 
console.log(result); // 输出 15
4.2 使用 return 关键字

return 语法用于返回函数执行后的结果,并立即结束当前函数的执行。return 后面的代码将不会再被执行。

4.3 注意事项
  • return 后可以接数据,也可以不接数据(函数默认返回值为 undefined)。
  • return 后面的数据不要换行书写,否则会导致代码错误。

总结

  1. 函数的返回值可以将函数内部的结果返回给外部调用者使用。
  2. return 关键字可以立即结束函数,并将结果返回给调用者。
  3. 如果函数中没有 return,或者 return 后没有接数据,则函数返回值为 undefined

5. 作用域

5.1 什么是作用域?

作用域是指在代码中某个变量、函数等名称可用的范围。作用域的使用可以提高程序的逻辑性和局部性,减少变量冲突。

JavaScript 中的作用域分为以下两种:

  • 全局作用域:作用于整个脚本文件(script 标签)或者独立的 JS 文件。
  • 局部作用域(函数作用域):作用于函数内部,仅在该函数内有效。
5.2 变量的作用域

根据作用域的不同,变量分为全局变量和局部变量:

  • 全局变量:在函数外部声明的变量,作用于整个程序,可以在任何地方访问和修改。
  • 局部变量:在函数内部声明的变量,只能在当前函数内部访问和修改。
5.3 变量访问原则
  • 变量访问时优先查找局部作用域,若局部作用域中无该变量,再向上查找全局作用域。这种查找方式称为作用域链

总结

  1. 作用域分为全局作用域和局部作用域。
  2. 局部变量和全局变量的访问优先级是:先局部,后全局。

6. 匿名函数

6.1 什么是匿名函数?

匿名函数是没有名字的函数,无法直接通过函数名来调用。通常匿名函数可以通过函数表达式或者立即执行函数的形式来使用。

6.2 匿名函数的使用
  1. 函数表达式
    将匿名函数赋值给一个变量,并通过该变量名称来调用匿名函数。

    let sayHi = function() {
        console.log("Hi!");
    };
    
    sayHi(); // 输出 "Hi!"
    
  2. 立即执行函数
    匿名函数可以通过立即执行的方式来使用,从而避免全局变量污染。

    (function() {
        console.log("立即执行函数");
    })();
    
6.3 注意事项
  • 立即执行函数无需调用,会在定义后立即执行。
  • 多个立即执行函数之间用分号隔开,否则会报错。

总结

  1. 匿名函数没有名字,不能直接通过名字调用。
  2. 可以通过函数表达式或者立即执行函数来使用匿名函数。

7. 综合案例

7.1 需求案例:转换时间

编写一个函数,接收用户输入的秒数,并自动转换为时、分、秒格式输出。

function convertSeconds(totalSeconds) {
    let hours = parseInt(totalSeconds / 3600);
    let minutes = parseInt((totalSeconds % 3600) / 60);
    let seconds = totalSeconds % 60;
    console.log(`时间:${hours}小时 ${minutes}分钟 ${seconds}`);
}

convertSeconds(5000); // 输出 "时间:1小时 23分钟 20秒"
7.2 逻辑运算符的短路特性
  • 短路特性存在于 &&|| 中。
    • &&:当左边为 false 时,右边不再执行。
    • ||:当左边为 true 时,右边不再执行。

总结

  • 运算结果为最后被执行的表达式值。
  • 短路特性常用于变量赋值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值