美文网首页js
js函数总结

js函数总结

作者: IDO0 | 来源:发表于2018-07-21 17:35 被阅读0次

    一声明:
    函数声明,存在声明提升
    函数表达式

    二内部对象:
    每个函数都有this,argments两个对象。
    apply call bind 内部方法
    参数传递是值传递

    三执行环境:
    1:作用域 =>保存当前和父环境活动对象的指针数组
    2:活动对象=>argments,声明的变量
    3:this=>动态改变

    四闭包:
    访问函数内部私有变量
    延迟变量声明周期,
    模仿块级作用域,
    共享变量。
    形式1:

    function f() {
        var arr = [];
        for (var i=0;i<10;i++){
           arr[i] = function () {
              console.log(i);//访问函数内部私有变量
           }
        }
       return arr;
    }
    var arr = f();
    console.log("arr",arr[7]()); //10
    

    形式2:

    function f() {
        var arr = [];
        for (var i=0;i<10;i++){
           arr[i] = function (index) {//访问函数内部私有变量 延迟储存变量i
               return function () {
                   console.log(index);
               }
           }(i)
        }
       return arr;
    }
    var arr = f();
    console.log("arr",arr[7]()); //7
    

    形式3:

    function f() {
        var count = 5;
        (function () {//模仿块级作用域,
            for(var i=0;i<count;i++){//访问函数内部私有变量
                console.log(i)
            }
        })()
    }
    

    形式4:

    (function () {
        var name = "wyq";
        Person = function () {}//作为类使用
        Person.prototype.setName=function (n) {
            name = n;
        };
        Person.prototype.getName = function () {
            return name;
        }
    })();
    /**
     * 代码作用:
     * 1:声明一个Person类
     * 2:初始化Person原型添加setName,getName方法
     * 3:模仿块级作用域
     * 4:通过闭包的方式在Person类外面嵌套一个匿名函数,使Person可以访问name属性
     * 5:所有Person实例共享name属性,适合单例使用*/
    

    五函数是什么:
    函数是对象
    函数是方法
    函数是类
    函数是函数

    function MyObject() {
        var name ="wyq";
        function getName() {//私有函数
            return name;
        }
        this.publicMethod = function () {//公有方法
            return getName();
        }
        this.age = 'asd'//公有属性 是对象
    }
    
    var obj = new MyObject();//函数是类
    console.log('obj.age',obj.age)
    console.log('obj.age',obj.publicMethod())
    

    js函数为什么没有重载?
    因为函数的本质是一种对象,函数名字重复相当于变量的重新赋值。

    function MyObject() {
        var name ="wyq";
        console.log('name',name);
    }
    等价于:
    var MyObject = function () {
        var name ="wyq";
        console.log('name',name);
    }
    
    所以同名函数如下:
    function MyObject() {
        console.log('hello');
    }
    var MyObject = function () {
      console.log('hello');
    }
    

    相关文章

      网友评论

        本文标题:js函数总结

        本文链接:https://www.haomeiwen.com/subject/ywohmftx.html