单元测试:

    示例代码:

    1. var add = (a, b)=> a + b;
    2. var expect = function(res){
    3. return {
    4. toBe: (actual)=>{
    5. if (res !== actual){
    6. throw new Error("期望值与预期值不符!");
    7. }
    8. }
    9. };
    10. };
    11. expect(add(1,2)).toBe(3);
    12. var test = (desc, func)=>{
    13. try {
    14. func();
    15. }
    16. catch(e){
    17. console.log(`${desc}没有通过测试`);
    18. }
    19. };
    20. test("加法测试", ()=>{
    21. expect(add(1,2)).toBe(3);
    22. });

    Jest 单元测试框架:

    Jest的安装:
    1. 安装node, npm i -D jest 或 yarn add -D jset
    2.npm ls jest 来查看是否安装成功;

    单元测试步骤:

    image.png

    math.js

    1. var add = function(a,b){
    2. return a+b;
    3. }
    4. module.exports = {add};

    math.test.js

    1. const {add} = require("./math");
    2. test("加法测试", ()=>{
    3. expect(add(2,2)).toBe(3);
    4. });
    1. {
    2. "name": "",
    3. "version": "",
    4. "scripts": {
    5. "test": "jest"
    6. },
    7. "devDependencies": {
    8. "jest": "^25.2.4"
    9. }
    10. }

    命令式编程:详细的命令机器怎么去处理一件事情以达到你想要的结果。

    函数式编程:
    函数式编程是一种编程范式,是一种构建计算机程序结构和元素的风格。它把计算看做是对数据函数的评估,避免了状态变化和数据的可变。

    代码示例:

    1. let arr = [1,2,3,4];
    2. let newArr = (arr, fn) =>{
    3. let res = [];
    4. for(let i = 0; i < arr.length; i++){
    5. res.push(fn(arr[i]));
    6. }
    7. return res;
    8. };
    9. let add = (item) => item + 1;
    10. let double = (item) => item * 2;
    11. let sum = newArr(arr, add);
    12. let multiple = newArr(arr, double);
    13. console.log(sum);
    14. console.log(multiple);

    纯函数:
    如果函数的调用参数相同,则永远返回相同的结果。他不依赖于程序执行期间函数任何状态或数据的变化,必须只依赖于其输入参数。

    函数副作用:
    当调用函数时,除了返回函数值之外,还对主调用函数产生附加的影响;例如,修改全局或修改参数等。

    保证函数无副租用的特性:
    1,函数入口使用参数运算,而不修改它;
    2.函数内不修改函数外的变量;
    3运算结果通过函数返回给外部(而不是通过修改参数使外部获得改变);

    可变性和不可变性:
    可变性是指一个变量创建以后可以任意修改;
    不可变性是指一个变量,一旦创建,就永远不会发生改变,不可变性是函数式编程的核心概念。
    image.png

    相关代码示例:

    1. // 函数式编程思想
    2. let arr = [1, 2, 3, 4];
    3. let newArr = (arr, fn) => {
    4. let res = [];
    5. for (let i = 0; i < arr.length; i++) {
    6. res.push(fn(arr[i]));
    7. }
    8. return res;
    9. }
    10. let add = item => item + 5;
    11. let multi = item => item * 5;
    12. let sum = newArr(arr, add);
    13. let product = newArr(arr,multi);
    14. console.log(sum);
    15. console.log(product);
    16. // 纯函数
    17. let discount = 0.8;
    18. let price = calculatePrice(200);
    19. console.log(price); // 160
    20. discount = 0.9;
    21. price = calculatePrice(200);
    22. console.log(price); // 180
    23. let a = 5;
    24. let foo = () => a = a * 10;
    25. foo();
    26. console.log(a); // 50
    27. // 依赖注入
    28. const foo = (d, log, something) => {
    29. const dt = d.toISOString();
    30. return log(`${dt}: ${something}`);
    31. }
    32. const something = '你好网易';
    33. const d = new Date();
    34. const log = console.log.bind(console);
    35. foo(d,log,something);
    36. // 深拷贝
    37. let data = { count: 1 };
    38. let foo = (data) => {
    39. let lily = JSON.parse(JSON.stringify(data));
    40. lily.count = 3;
    41. }
    42. console.log(data.count);
    43. // 调用foo函数
    44. foo(data);
    45. console.log(data.count);