语句和函数
语句
通常来说,一行就是一个 JS 语句。JS 不要求在行末加上分号,因为在 JS 被解释执行时,会判断一行是否是已完成的语句,如果是,就会自动的在行末加上分号。
例如 let i = 0
和 let i = 0;
都是合法的句子。
通常建议在所有语句后都加上分号。
函数
函数的作用,是用来执行一些预定好的动作。在使用函数前,同样也需要定义函数,只不过函数定义的位置不一定需要在使用的位置之前。
定义函数
定义函数需要使用关键字function
,格式为function [函数名]([参数])
。
举个例子,现在新建一个叫 function.js 的文件,在里面添加如下代码:
"use strict"
function sayHello() {
console.log('Hello!');
}
sayHello();
然后在node中运行一下:
$ node function
$ Hello
参数
函数名后面的括号里可以放参数,也可以留空,但是括号得留着。现在把 function.js 改一下:
"use strict"
let message = 'haha';
say(message);
function say(msg) {
console.log(msg);
}
函数 say
接受一个参数,并且将其输出。注意这里把函数定义放在了调用的后面,这同样是可以成功运行的。
返回值
函数可以使用关键字 return
返回任意类型的数据,包括返回一个函数,也可以不返回;还可以使用 return 来结束一个函数:
function add(valueA, valueB) {
if (valueA > 10) {
return;
}
return valueA + valueB;
}
这里在函数开始时加了个判断:如果 valueA 大于 10 就结束函数,否则返回 valueA 和 valueB 的和。
将函数作为变量
之前也说了, function
也是一中类型,完全可以将一个函数赋给一个变量,这么做等同于给变量创建了一个别名:
let add = function(valueA, valueB) {
return valueA + valueB;
}
let addToo = add;
console.log(add(1, 2)); // 输出 3
console.log(addToo(1, 2)); // 输出 3
在函数中返回一个函数也是同理:
function addFunc() {
return function(valueA, valueB) {
return valueA + valueB;
}
}
console.log(addFunc()(1, 2)); // 输出 3
注意上面的第一个 return 中返回的函数没有函数名,我们管这叫匿名函数。
回调函数
在 JS 里通常会出现一个概念,叫做回调
,回调指的就是,在一个函数完成后,自动执行另一个函数。
什么意思呢,其实这个说白了,就是在函数A的参数里加上一个函数B,然后在A该做的都做完之后,就调用B。通常来说,回调都会提供两个,一个onSuccess
,一个onFailed
,分别用于处理不同情况的结果,当然这不是必须的。
来举栗子:
function func(value, onSuccess, onFailed) {
// 如果 value 大于 10 ,就执行 onSuccess,否则执行 onFailed
value > 10 ? onSuccess() : onFailed();
}
使用箭头函数
箭头函数也就是匿名函数的另一种写法,语法为(参数) => {函数内容}
。
比如上面那个匿名函数的栗子就可以改成糖炒栗子:
function addFunc() {
return (valueA, valueB) => {
return valueA + valueB;
}
}
console.log(addFunc()(1, 2)); // 输出 3
结果是一样的。