上一节我们讲解了JS里的循环结构,本节我们将继续JS语法的学习,开始认识函数。那什么是函数呢?在JS里,函数由关键字“function”定义,执行特定功能,相当于一个复用性高的代码块。JS里的函数一般有三个部分组成,参数(可选,多个参数通过','隔开)、函数功能和返回值(可选),简单理解就是函数功能把参数加工成返回值。
JS里函数的语法格式一般为:
// 函数声明
function functionName(parameters) {
return result;
}假如我们需要设计一个两数求和的函数我们一般会这样:
/*加法函数*/
function add(a,b)//function关键字进行函数声明,多个参数通过','隔开
{
return a+b//return关键字表示返回值
}
let a=0
let b=1
alert(`${add(a,b)}`)//通过add函数输出1
/*输出1*/当然,我们也可以写成函数表达式的样子:(让函数像变量一样)
/*加法函数表达式*/
const add=function(a,b)
{
return a+b
}
let a=0
let b=1
alert(`${add(a,b)}`)
/*输出结果1*/值得注意的是,函数声明后,我们在哪里都可以调用函数;而使用函数表达式时,我们只有在声明函数表达式后才能调用。
在ES6后,我们可以通过箭头函数来简化函数表达式。比如这里我们通过箭头表达式声明一个加法函数:
/*加法函数(箭头函数)*/
const add=(a,b)=>a+b
let a=0
let b=1
alert(`${add(a,b)}`)
/*输出1*/不过,使用箭头函数后,该函数没有自己的this、arguments、super等特殊变量,也不适合作为构造函数。
当我们需要创建私有变量时,我们可以通过立即调用函数表达式(IIFE)来实现。立即调用函数表达式(IIFE),顾名思义,就是创建函数后立刻执行一次,往后不能进行二次调用。立即调用函数表达式(IIFE)的语法格式如下:
/*
(function() {
函数体
})();
*/为什么说立即调用函数表达式(IIFE)很重要?原因在于:在let/const和ES6模块出现之前,JavaScript只有var函数作用域:
// ES5 时代:没有块级作用域,只有函数作用域
for (var i = 0; i < 3; i++) {
// i 会泄漏到全局
}
console.log(i); // 3 - 变量污染!
// 用 IIFE 解决:
(function() {
for (var i = 0; i < 3; i++) {
// i 被限制在 IIFE 内部
}
})();
console.log(i); // ReferenceError - 完美隔离不过现在let已经能够实现块级作用域了,立即调用函数表达式(IIFE)仍然在创建私有变量方面十分重要。
总结:在JS中,函数可以通过多种方式定义:函数声明使用function关键字且会被提升,允许在声明前调用;函数表达式将函数赋值给变量,按代码顺序执行;箭头函数语法简洁且没有自己的this绑定,特别适合用作回调函数;立即调用函数表达式(IIFE)则能创建独立作用域,主要用于模块化和私有变量的实现。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程