js面向对象-闭包

理解变量的作用域、垃圾回收。

javascript语言特殊之处:在函数内声明变量一定用var,不用的话实际上是声明了一个全局变量。

js若类型语言,灵活,但安全性低。

如:

        function Person()
        {
            this.name = "xiaoqiu";
            this.GetName = function () {
                return this.name;
            }
        }
        Person();
        alert(window.GetName());
这里window都可以调用到GetName方法.为什么?

javascript中,function既可以作为方法,也可以作为类。这里Person()意味着调用了这个方法。

那么,方法中有this关键字,this指向本身,这里直接被调用了,this没有指向一个对象。

所以就默认指向了被调用者->window.

那么window就拥有了Person内部的GetName方法。这样是不安全的。

闭包是 JavaScript 一个非常重要的特性,这意味着当前作用域总是能够访问外部作用域中的变量。 因为函数是 JavaScript 中唯一拥有自身作用域的结构,因此闭包的创建依赖于函数。

闭包的场景:
1.使用闭包可以在JavaScript中模拟块级作用域;
2.闭包可以用于在对象中创建私有变量。

闭包主要特征:

1、有两个或两个以上的函数有相互嵌套相互指向。

2、必有函数或结果被retrun

改进:
  function Person()
        {
            this.name = "xiaoqiu";
            return {
                'GetName': function () {
                    return name;
                }
            }
        }
        Person();
        alert(window.GetName());
这里window再调用GetName方法就会报错了.window.GetName is not a function
        function Person() {
            this.name = "xiaoqiu";
            //return {
            //    'GetName': function () {
            //        return name;
            //    },
            //    'GetAge': function () {
            //        return 21;
            //    }
            //}
            function GetName() {
                return name;
            }
            function GetAge() {
                return 21;
            }
            //内部嵌套函数,可以返回json组合,这样就有了私有变量
            return {
                n: GetName(),
                a: GetAge()
            }
        }
        var p = Person();
        alert(p.n + "..." + p.a);
记住return的存在与函数的指向,如若使用过多的闭包会造成内存不足,慎重使用。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值