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

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

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

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

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

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

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

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

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

扫描二维码关注公众号,回复: 4623959 查看本文章

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

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

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

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

单例模式:

模块模式:

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

猜你喜欢

转载自blog.csdn.net/wurourouzhang/article/details/85222472
今日推荐