Js如何构造块级作用域,构造私有变量

众所周知,Js是没有块级作用域的,但可以使用匿名函数来模仿块级作用域。

1. for循环中定义的变量,从他有定义开始就可以在函数内随处访问他。

可以看出,for循环内定义的变量并没有块级作用域。注意:必须调用函数,函数内的变量才可以声明。

2. 用匿名函数来模仿块级作用域(私有作用域)

这里在块级作用域(私有作用域)可以访问count的原因是,匿名函数是外部函数的内包。

优点:这种做法可以减少内包占用的内存问题,因为没有指向匿名函数的引用,只要函数执行完毕,就可以立即销毁函数的作用域链了。

3. 私有变量:函数的参数、局部变量、在函数内定义的其他函数(闭包)

这里,外部不能直接修改私有的属性,只能通过特权方法(公有方法)来修改和访问属性和方法

缺点:使用构造函数模式来定义特权方法(公有方法),使得每个实例都会创建同样一组新方法。解决办法:创建静态私有变量。

4. 静态私有变量。私有函数和变量是所有实例都共享的,即每个实例都没有自己的私有变量。

这里的Person构造函数是一个全局变量(因为1. 使用的函数表达式声明的而不是函数声明----函数声明只能创建局部函数。2. 没有使用var关键字声明Person---初始化未声明的变量会创建一个全局变量),所以能在私有作用域之外被访问。

5. 模块模式(用于为单例创建私有变量和特权方法)。上述两种都是为自定义对象创建私有变量和特权方法

单例模式:

模块模式:

 6. 增强模块模式(适合单例必须是某种类型的实例)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值