Mr.J--JS学习(闭包私有化)

本文探讨JavaScript中如何通过闭包实现私有化,模拟块级作用域以避免全局变量冲突。通过匿名函数创建私有作用域,并举例说明私有变量对外部的不可见性。还展示了闭包在for循环中的应用示例。
摘要由CSDN通过智能技术生成

闭包私有化

It’s a tree falling in the forest with no one around to hear it.     ——《你不知道的Javascript(上卷)》

JavaScript中是没有块级作用域的,为了在JavaScript中引入块级作用域,可以使用匿名函数模拟块级作用域。为什么大费周折整出块级作用域呢?因为有了块级作用域,每个开发人员都可以在块级作用域中定义自己的变量,而不用担心会搞乱全局作用域,过多的全局作用域变量核函数会导致命名冲突。匿名函数用作块级作用域被称为私有作用域(private scope),这个匿名函数实际上就是一个闭包,它可以访问自己内部活动对象,函数执行完成即销毁,不占用内存,语法如下:

(function () {
//块级作用域
})();

上述代码首先将函数声明包含在圆括号中,这表示这段代码实际上是一个函数表达式,紧随其后的圆括号会立即调用这个函数。
以下实例表明,私有作用域的变量不可由外部访问

下面用一实例进行测试

function Person(name,sex){
			//私有化变量
			var otherName = "Json";
			
			this.name = name;
			this.sex = sex;
			
			this.change = function(){
				this.name = otherName;
			}
			
			this.changeName = function(target){
				otherName = target;
			}
			
			this.sayName = function(){
				console.log(otherName);
			}
			
		}
		

 

运行结果:


for循环示例:

for (var i=1; i<=5; i++) {
setTimeout( function timer() {
console.log( i );
}, i*1000 );
}
for (var i=1; i<=5; i++) {
(function() {
var j = i;
setTimeout( function timer() {
console.log( j );
}, j*1000 );
})();
}

相信了解闭包之后这两个的运行结果应该很简单的就能看出来:

第一个结果:

6

6

6

6

6

第二个结果:

1

2

3

4

5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值