zoukankan      html  css  js  c++  java
  • JS 函数

    函数

    函数申明的方式

    #1 构造函数
    let func = new Function('title', 'console.log(title)');
    func('后盾人');
    
    #2 具名函数
    function hd(title) {
        console.log(title);
    }
    hd('后盾人');
    
    #3 匿名函数
    let cms = function (title) {
        console.log(title);
    };
    cms('后盾人');
    

    全局函数定义特点

    全局函数定义的会被压倒 window 对象中。而用匿名函数赋值给 let、const 关键字声明的变量则不会被压入 window。

    推荐:函数不要独立声明,使用类、模块的形式进行管理。

    function hd() {
        console.log('后盾人');
    }
    window.hd();
    
    let cms = function() {
        console.log('后盾人');
    };
    cms();
    

    匿名函数与函数提升

    匿名函数方式声明的函数,不会有函数提升。

    show();
    function show() {
        console.log('后盾人');
    }
    

    立即执行函数与块作用域解决冲突

    建议:使用模块化方式解决冲突

    #1 立即执行函数
    (function(w) {
        function show() {
            console.log('mod1 show method');
        }
        function hd() {
            console.log('后盾人');
        }
        w.mod1 = {show}
    })(window);
    mod1.show();
    
    #2 let 块作用域
    {
       let show = function() {
           console.log('mod2 show method');
       }
       
       let hd = function() {
            console.log('后盾人');
       }
       
       window.mod2 = {show}
    }
    mod2.show();
    

    形参与实参

    实参多于形参,多出的参数会被忽略。

    实参少于形参,少的形参默认值为 undefined。

    function sum(a, b) {
        return a + b;
    }
    console.log(sum(1, 2));
    

    默认参数的技巧

    有默认参数的形参放到后面。

    function avg(total, count) {
        count = count || 1;
        return Math.round(total / count);
    }
    console.log(avg(3000));
    
    #es6
    function avg(total, count = 1) {
        return Math.round(total / count);
    }
    console.log(avg(3000));
    

    函数参数与arguments

    arguments 是一个对象。

    function sum() {
        let total = 0;
        for(let i = 0; i < arguments.length; i++) {
            total += arguments[i];
        }
        return total;
    }
    console.log(sum(1, 2, 3, 4, 5));
    

    箭头函数使用方法

    只有一个参数的时候,可以不加括号。

    只有一行表达式的时候,可以不加花括号和return和分号。

    let sum = () => {
        return 1 + 2;
    };
    //let sum = () => 1 +2;
    console.log(sum());
    

    递归

    function factorial(num) {
        if (num == 1) {
            return 1;
        }
        return num * factorial(num - 1);
    }
    console.log(factorial(3));
    
    #一层层网上返回
    return 3 * factorial(3 - 1);
    return 2 * factorial(2 - 1);
    return 1;
    

    什么叫回调函数

    let hd = [1, 2, 3, 4];
    hd.map(function(value, index, array) {
        array[index] += 10;
    });
    console.log(hd);
    

    展开语法

    let [a, ...edu] = [1, 2, 3, 4];
    

    this

    this 指的是上下文环境。

    箭头函数中的 this 指向父级作用域中的 this。

    let edu = {
        name: "后盾人",
        show: function() {
            console.log('对象属性值为方法的 this 指的是当前对象');
            function render() {
                console.log('非严格模式下 this 指的是 window')
            }
        }
    }
    

    this 的构造原理实现

    call、apply,除了传递参数不同,其他都一致,且会立即执行。

    call,bind,除了bind不会立即执行,且可以在bind的时候传参或者调用的时候传参,其他都一致。

    let lisi = {name: "李四"};
    function User(web, url) {
        console.log(arguments);
    }
    User.call(lisi, '百度', 'baidu.com');
    User.apply(lisi, ['百度', 'baidu.com']);
    let func = User.bind(lisi, '百度', 'baidu.com');
    func();
    
    分情破爱始乱弃,流落天涯思别离。 如花似玉负情意,影如白昼暗自迷。 随风浮沉千叶落,行色匆匆鬓已稀。
  • 相关阅读:
    servlet 表单加上multipart/form-data后request.getParameter获取NULL(已解决)
    火狐浏览器通过配置文件锁定主页
    如何最快速的完成智慧树期末考试(有钱的大佬请绕道)记----智慧树考试生产力
    java代码发送邮箱验证码与qq邮箱smtp服务
    邮件服务器
    Android requestcode resultcode的作用
    伽卡拉他学生客户端无法运行任务管理器的解决方法
    Django自定义UserModel并实现认证和登录
    {%csrf_token%}的作用
    Producer Flow Control 和 vmQueueCursor
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/15059260.html
Copyright © 2011-2022 走看看