zoukankan      html  css  js  c++  java
  • 第七章:函数表达式

    //    递归函数
        function factorial(num) {
            if (num === 1) {
                return 1
            } else {
                return num * factorial(num - 1);
            }
    
    
        }
        console.log(factorial(99));
        /*arguments.callee  ====               表示函数本身 在递归时使用                                    */
        function fun() {
            console.log(arguments.callee)
        }
        fun()
        
        
        /*闭包==貌似啊好牛*的样子
             *   是指有权访问另一个函数作用域中的变量的函数
             *       创建闭包的常见方式是在一个函数内部创建另一个函数
             *   */
            function fn() {
                return function () {
                    console.log(1)
                }
            }
            fn()();
        
            /*每个函数都有一个执行环境,这个执行环境都有一个表示变量的对象
             *   全局环境的变量对象始终存在*/
            function compare(a, b) {
                if (a > b) {
                    return 1;
                } else if (a < b) {
                    return -1;
                } else {
                    return 0;
                }
        
            }
            /*当调用这个函数时会创建一个包含 arguments,a,b 的活动对象
            *       全局执行环境的变量对象在compare() 执行环境的作用域中处于第二位
            *       会创建一个预先包含全局变量对象的作用域链,这个作用被保存在内部的[[Scope]]属性中
            *
            *   函数执行时,会为函数创建一个执行环境
            *       */
        
            compare(1,2);
        
            /*一般而言当函数执行结束后,局部活动对象就会被销毁,内存中仅保存全局作用域(但是闭包的环境除外)*/
            
            
            /*this对象是在运行时基于函数的执行环境绑定的
                *  1 全局函数中this指向window
                *  2 而当函数作为某个对象的方法调用时this 就是那个对象
                *
                *   不过匿名函数的执行环境是具有全局性的 (因此this对象通常指向window)
                *
                *   每个函数被调用时都会自动取得两个特殊变量,
                *                       this
                *                       arguments
                * */
                var name='the window';
                var obj={
                    name:'my obj',
                    getName:function () {
                        return function () {
                            return this.name
                        }.bind(this);//加上bind(this)这里的this就是指这个对象了
                    }
                };
                console.log(obj.getName()())
  • 相关阅读:
    实验5 Spark SQL 编程初级实践
    豆瓣基础架构
    淘宝数据魔方技术架构解析
    质量属性的六个常见属性场景--淘宝网
    Win10家庭版WindowsUpdate属性为灰色
    豆瓣的基础架构
    京东618实践:一元抢宝系统的数据库架构优化
    FunData — 电竞大数据系统架构演进
    Ubuntu14.0使用gparted调整分区大小
    二阶段开发冲刺一
  • 原文地址:https://www.cnblogs.com/aqigogogo/p/7639694.html
Copyright © 2011-2022 走看看