关于闭包有些还不能理解

关于闭包有些还不能理解

老师您好,对于闭包我还是不太能理解。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script type="text/javascript">
    var Person = (function() {
        var instance=null;
        return function() {
            if(instance){
                return instance;
            }
            this.name = 'zhangsan';
            this.id = Math.random();
            return instance=this;
        }
    })();
    var Person1 = new Person();
    var Person2 = new Person();
    console.log(Person1.name == Person2.name);
    </script>
</body>
</html>

这样的意思是不是person为全局变量,所以将自执行的内容返回给它,这样里面的instance就能保存来吗?但是执行到那边不是又把null赋予了instance了吗?我的理解是不是instance为内部变量?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕言 2019-08-16 20:25:10

同学你好,在同学提供的代码中自执行函数只执行一次,里面的代码也会执行一次(上面赋值为null,代码执行到instance=this也是会重新赋值的)。

代码是从上到下去执行的,上面的代码会执行,下面的代码也是会执行的,同学可以理解为只是加载的时间顺序不一样而已

这块内容可能会比较绕,同学可以慢慢的理解。

如果帮助到了你,欢迎采纳~祝学习愉快~

好帮手慕言 2019-08-16 10:51:52

同学你好,Person是在全局声明的,所以是全局变量,接收的是函数执行之后的结果。

instance是在函数自执行里面声明的,是局部变量,在外部访问不到,会报错的。我们可以打印一下看结果

http://img1.sycdn.imooc.com//climg/5d5619090001c98405320394.jpg

控制台:

http://img1.sycdn.imooc.com//climg/5d5619220001b98205030156.jpg

这里是利用闭包的方式把instance返回出来,在声明时值为null,但是在函数自执行里面又给instance变量重新赋值了。

http://img1.sycdn.imooc.com//climg/5d561989000155c605220361.jpg

同学可以在理解一下,同学遇到不理解的可以打印一下,在控制台看输出结果。如果哪里还是不明白,可以再次提问

如果帮助到了你,欢迎采纳~祝学习愉快~

  • 提问者 慕仰7346279 #1
    谢谢老师的回答,就是还是不理解那每次去执行这个自执行函数的时候第二行时instance不是每次都被赋予了null吗?那应该都不会执行if里面的东西把??就是不理解这个
    2019-08-16 13:15:22
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师