zoukankan      html  css  js  c++  java
  • Javascript高级程序设计——this、闭包、函数表达式

          在javascript中函数声明会被提升,而函数表达式不会被提升。当函数执行时,会创建一个执行环境和相应的作用域链,然后利用arguments和其他的命名参数的值来初始化函数的活动对象,作用域链链中所有的外部活动对象都处于第二的位置。

      

    function compare(num1, num2){
        if(num1 < num2){
            retunr -1;   
        }
        else if(num1 = num2){
            retunr 0;   
        }
        else(num1 > num2){
            retunr 1;   
        }
    }
    
    
    var result = compare(5, 10);

    1、调用compare函数时,先创建了一个包含this、arguments、num1、num2的活动对象,然后全局作用域包含this、result、compare在作用域链的第二的位置。

    2、每个执行环境都有一个表示变量的对象变量对象。全局环境的变量对象始终存在,而compare函数的局部环境的变量对象,只在执行过程存在。

    3、在创建compare时,会创建一个预先包含全局变量对象的作用域链保存在scope属性中。调用compare时会创建一个执行环境,然后通过复制函数的scope的属性中的对象来      构建起执行环境的作用域链,然后又有一个活动对象被创建并,推入执行环境的作用域前端。

    4、函数执行完其局部活动对象就销毁了,除非包含闭包。

    如果在一个函数内部声明另一个内部的函数,那么内部的函数有权访问包围函数的活动对象,内部函数就是闭包。

    在一个函数内部定义的函数会将包含的活动对象添加到作用域链中,在外部函数执行完后,其执行环境的作用域链会被销毁,但活动对象仍然会留在内存,直到内部

    的匿名函数被销毁。

    闭包保存引用整个外部函数的活动对象,

    function ass(){
        var element = document.getElementById("id");
        elelment.onclick = function(){
            alert(element.id);
        }
    }

    创建一个element事件处理的闭包,内部引用了外部整个活动对象,所以这里会有循环引用,取消循环引用

    function ass(){
        var element = document.getElementById("id");
        var id = element.id;            //复制属性值,消除循环引用
        elelment.onclick = function(){
            alert(id);
        }
        element = null;             //取消引用,释放内存
    }

    注意:匿名函数的执行环境具有全局性,this.通常指向全局作用域window。

    var name = "window"
    
    var obj = {
        this.name : "in object";
        getName:function(){
            return :function(){
                return this.name;
            }
        }
    }

    alert(obj.getName()());
    输出window,匿名函数执行环境具有全局性。
  • 相关阅读:
    免费素材:推荐最新的免费图标字体Sosa
    如何选择Javascript模板引擎(javascript template engine)?
    名片设计最佳实践和技巧分享
    帮助你生成翻页效果的jQuery插件 bookblock
    网页网站收集
    main xml信息
    c# winrar 打包
    c# 压缩文件
    前端工程师
    fash 3D 游戏
  • 原文地址:https://www.cnblogs.com/yangxunwu1992/p/4782563.html
Copyright © 2011-2022 走看看