• 深入理解的JavaScript函数编程


    <!DOCTYPE html>
    <html>
    
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
    
        <body>
            <script type="text/javascript">
                //            初阶部分
                //            字符串可以保存为变量, 函数说他也可以
                var autumn = 'autumnswind';
                var autumn_fn = function() {
                    return 'autumnswind';
                };
                //            字符串可以保存对象字段,函数说他也可以
                var autumnswind = {
                    autumn: 'autumnswind',
                    autumn_fn: function() {
                        return 'autumnswind'
                    }
                };
                //            字符串可以用时再创建,函数说他也可以
                'Autumns' + (function() {
                    return 'Wind'
                })();
                //            字符串可以作为参数传给函数,函数说他也可以
                var autumn;
                function autumn_fn() {};
                function hellloWorld(autumn, autumn_fn) {
                    return;
                }
                //            字符串可以作为函数返回值,函数说他也可以
                return 'autumnswind';
                return function() {
                    return 'autumnswind';
                };
                //            高阶部分:
                //            有了上面的例子, 那么我们就可以把函数这个小孩子带到好多好玩的地方, 往下慢慢看~
                //                首先看第一个例子
                var obj1 = {
                        value: '秋风'
                    },
                    obj2 = {
                        value: 'autumnswind'
                    },
                    obj3 = {
                        value: '莎娜'
                    };
                var values = [];
                function add(obj) {
                    values.push(obj.value);
                }
                add(obj1);
                add(obj2);
                console.log(values); // 秋风,autumnswind
                //            这种写法, 大家都知道了, 变量会污染全局环境, 并且一旦有一个地方忘记修改了就会变得很不稳定,
                //            不像函数体一样, 只负责内部的输入输出, 这里如果融入上下文的其他函数和变量就会变得非常混乱
                //
                //            根据这样修改成第二个例子:
                var obj1 = {
                        value: '秋风'
                    },
                    obj2 = {
                        value: 'autumnswind'
                    },
                    obj3 = {
                        value: '莎娜'
                    };
                function add(obj) {
                    var values = [];
                    values.push(obj.value);
                    return values;
                }
                跟下面一样
                /*function add(obj) {
                    var values = [];
                    var accumulate = function() {
                        values.push(obj.value);
                    };
                    accumulate();
                    return values;
                }*/
                add(obj1);
                add(obj2);
                console.log(add(obj1)); // 秋风
                console.log(add(obj2)); // autumnswind
                //            这样我们把values数组声明放进去函数内部, 这样就不会被其他外部变量骚扰了,
                //            但是问题又来了, 只有最后传入对象值才可以返回, 那不是我们的初衷
                //            最后看消除所有尴尬的第三个例子:
                var
                    obj1 = {
                        value: '秋风'
                    },
                    obj2 = {
                        value: 'autumnswind'
                    },
                    obj3 = {
                        value: '莎娜'
                    };
                var Add = function(obj) {
                    var
                        values = [];
                    var
                        _calc = function(obj) {
                            if(obj) {
                                values.push(obj.value);
                                return values;
                            } else {
                                return values;
                            }
                        };
                    return _calc;
                    //可以这样把它看成匿名函数省去一个没必要的变量
                    /*return function(obj) {
                        if (obj) {
                            values.push(obj.value);
                            return values;
                        } else {
                            return values;
                        }
                    }*/
                };
                var calc = Add();
                calc(obj1); //相当于ValueAccumulator()(obj1)
                calc(obj2); //走if分支
                console.log(calc()); //走else的分支
            </script>
        </body>
    
    </html>
  • 相关阅读:
    解决项目迁移至Kubernetes集群中的代理问题
    gorm系列-简单入门
    py操作mongodb总结
    zabbix添加监控项以及常用的键值
    监控服务器cpu、磁盘、模板以及自定义key
    Zabbix+Grafana打造高逼格监控系统
    基于Docker的Mysql主从复制搭建
    rbac权限管理
    Django的认证系统
    Django 中间件
  • 原文地址:https://www.cnblogs.com/LLX8/p/9212011.html
Copyright © 2020-2023  润新知