资讯专栏INFORMATION COLUMN

闭包--闭包之this(三)

Backache / 1959人阅读

自执行函数

下面三个自执行函数是一样的

        //1.
        function test(i){
            console.log(i)
        }
        test("aa")

        //2.
        (function(i){
            console.log(i)
        })("aa")

        // 3.
        var aa = "aa";
        (function(i){
            console.log(i)
        })(aa)
        var a = [1, 2, 3, 4]; {
            var a = [1, 2, 3, 4, 5];
            (function(i) {
                var a = [1, 2, 3, 4, 5, 6];
                for (var i = 0; i < a.length; i++) {
                    console.log(i)  //0,1,2,3,4,5
                }
            })(a)
        }
this
        var num =1;
        var obj = {
            num:2,
            fn:(function(num){
                this.num*=2;
                num+=2;
                return function(){
                    this.num*=3;
                    num++;
                    console.log(num)
                }
            })(num)  //window下的num
        }
        var fn = obj.fn;
        fn();  //4
        obj.fn()  //5
        console.log(num,obj.num); //6,6
fn()
console.log(fn)
console.log(obj.fn())

拆分
        var num =1;
        var obj = {
            num:2,
            fn:(function(num){
                this.num*=2;
                num+=2;
                console.log(this)  //window
                return function(){
                    this.num*=3;
                    num++;
                    console.log(this)  //window
                    console.log(num)   //4
                    console.log(this.num)  //6
                }
            })(num)  //window下的num
        }
        var fn = obj.fn;
        fn();  
        console.log(num,obj.num); //6,2
        var num =1;
        var obj = {
            num:2,
            fn:(function(num){
                this.num*=2;
                num+=2;
                console.log(this)  //window
                return function(){
                    this.num*=3;
                    num++;
                    console.log(this)  //obj
                    console.log(num)  //4
                    console.log(this.num)   //6
                }
            })(num)  //window下的num
        }
        var fn = obj.fn; 
        obj.fn()  
        console.log(num,obj.num); //2,6

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99299.html

相关文章

  • 前端学习笔记闭包——看了一张图终于明白啥是闭包

    摘要:在一个闭包环境内修改变量值,不会影响另一个闭包中的变量。直到看到函数闭包闭包这篇文章的代码一部分,终于明白其中的逻辑了。 闭包 闭包定义:指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。函数内部可以直接读取全局变量。函数内部变量无法在函数外部访问。函数内部声明要用var或者let声明,不然会变成全局变量链式作用域:子对象会一级级向上寻找...

    andycall 评论0 收藏0
  • 进击JavaScript)玩转闭包

    摘要:为了更好的理解,在阅读此文之前建议先阅读上一篇进击之词法作用域与作用域链什么是闭包闭包的含义就是闭合,包起来,简单的来说,就是一个具有封闭功能与包裹功能的结构。在中函数构成闭包。 为了更好的理解,在阅读此文之前建议先阅读上一篇《进击JavaScript之词法作用域与作用域链》 1.什么是闭包 闭包的含义就是闭合,包起来,简单的来说,就是一个具有封闭功能与包裹功能的结构。所谓的闭包就是...

    cyixlq 评论0 收藏0
  • JavaScript闭包

    摘要:以上描述,全部符合闭包的描述,那这就是闭包。二执行过程之前的文章讲了函数的执行上下文栈,变量对象,作用域链等内容,接下来通过闭包代码回顾代码是怎么样的执行过程。将活动对象压入作用域链顶端。函数执行结束,弹出执行上下文栈。 本文一共 1300 字,读完只需 5 分钟 概述 闭包, 可以说是每个前端工程师都听说的一个词,咋一看很难从字面上去理解,从而给人留下了闭包是一个重要又难以理解的...

    huashiou 评论0 收藏0
  • JavaScript闭包

    摘要:而闭包的妙处在于,当函数在执行完毕后它的活动对象不会被销毁,因为匿名函数的作用域链仍然在引用函数的活动对象它的作用域链会被销毁。 一、闭包 闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常用方式是,在一个函数内部创建另一个函数。 请看以下代码:我们在createComparisonFunction函数里创建了一个闭包 function createComparisonFun...

    Mr_houzi 评论0 收藏0
  • 进击的 JavaScript( 函数执行过程

    摘要:中没有可执行的函数了,执行完出栈。当某个函数被调用时,会创建一个执行环境及相应的作用域链。检查当前环境中的函数声明使用声明的。确定指向所以说的指向,是在函数执行时确定的。 理解js 的执行过程是很重要的,比如,作用域,作用域链,变量提升,闭包啊,要想明白这些,你就得搞懂函数执行时到底发生了什么! 一、执行环境(Execution Context)又称执行上下文 当代码执行时都会产生一个...

    netmou 评论0 收藏0

发表评论

0条评论

Backache

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<