语句和函数

语句

通常来说,一行就是一个 JS 语句。JS 不要求在行末加上分号,因为在 JS 被解释执行时,会判断一行是否是已完成的语句,如果是,就会自动的在行末加上分号。

例如 let i = 0let 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

结果是一样的。