zoukankan      html  css  js  c++  java
  • 前端基础进阶(七):函数与函数式编程

    https://segmentfault.com/a/1190000012646488  https://yangbo5207.github.io/wutongluo/

    说明:此处只是记录阅读前端基础进阶的理解和总结,如有需要请阅读上面的链接

    一、两种函数声明方式

    1)使用function声明 

    fn();  // function
    
    function fn() {
        console.log('function');
    }

    2)使用函数表达式,即使用var声明

    fn(); // 报错
    var fn = function() {
        console.log('function');
    }

    两种声明方法的区别:使用function声明的函数可以在函数声明以上或者以后任何地方使用,因为以function声明的函数在创建变量对象时就指向函数地址,而var声明的函数,在变量对象刚创建时指向undifined,在执行上下文执行阶段才指向函数地址,所以必须先声明后使用。上面的执行顺序相当于下图

    var fn =undifined;//变量声明,初始值undifined
    fn();//未赋值就使用所以报错
    
    var fn = function() {
        console.log('function');
    }

    二、匿名函数

    没有函数名称的函数叫做匿名函数。匿名函数一般用来当做参数传入另一个函数

    function setTimeOut(function()
    {
        console.log("1s后打印!")
    },1000
    
    )

    三、自执行函数与模块

    ES5没有块作用域的概念,一般使用自执行函数来模仿模块

    (function(){
       .... 
    })();

    一个自执行函数,也就是一个模块往往可以包括:私有变量、私有方法、公有变量、公有方法。一般模块外面访问不了模块里面的变量和方法,但是可以用闭包把方法或变量暴露给外面,变成公有方法和公有变量

    (function() {
        // 私有变量
        var age = 20;
        var name = 'Tom';
    
        // 私有方法
        function getName() {
            return `your name is ` + name;
        }
    
        // 共有方法
        function getAge() {
            return age;
        }
    
        // 将引用保存在外部执行环境的变量中,形成闭包,防止该执行环境被垃圾回收
        window.getAge = getAge;
    })();

    四、函数的特性

    1)函数是第一等公民

    函数与别的数据类型一样,可以赋值给其他变量,也可以当做参数传递给另一个,还可以当做函数的返回值

    var a = function foo() {}  // 赋值
    function fn(function() {}, num) {}   // 函数作为参数
    
    // 函数作为返回值
    function var() {
        return function() {
            ... ...
        }
    }

    2)只用"表达式",不用"语句"

    "表达式"(expression)是一个单纯的运算过程,总是有返回值;"语句"(statement)是执行某种操作,没有返回值。函数式编程要求,只使用表达式,不使用语句。也就是说,每一步都是单纯的运算,而且都有返回值。

    function setBackgroundColor(ele, color) {
        ele.style.backgroundColor = color;
        return color;
    }
    
    // 多处使用
    var ele = document.querySelector('.test');
    setBackgroundColor(ele, 'red');
    setBackgroundColor(ele, '#ccc');

    3)纯函数

    相同的输入总是得到相同的结果,并且不会改变原数据的函数叫做纯函数

    function getLast(arr) {
        return arr[arr.length];
    }
    
    function getLast_(arr) {
        return arr.pop();
    }
    
    var source = [1, 2, 3, 4];
    
    var last = getLast(source); // 返回结果4 原数组不变,纯函数
    var last_ = getLast_(source); // 返回结果4 原数据最后一项被删除,不是纯函数

    4)闭包、柯里化

  • 相关阅读:
    10055
    国外程序员推荐:每个程序员都应该读的非编程书
    Volume 0. Getting Started
    如何成为一名 Google 软件工程师?【Google招聘信息】作者: 丁鑫哲
    毕设-家校通
    如何快速创建数据库连接字符串
    LeetCode day13
    LeetCode day12
    LeetCode day11
    LeetCode day10 Called it
  • 原文地址:https://www.cnblogs.com/lidaying5/p/8574508.html
Copyright © 2011-2022 走看看