让你的javascript函数拥有记忆功能,减少全局变量的使用

本文介绍了一种在不使用全局变量的情况下实现函数记忆功能的方法,通过定义立即执行函数并利用闭包特性来缩小变量作用域,从而避免了全局变量可能导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

考虑如下场景:假如我们需要在界面上画一个圆,初始的时候界面是空白的;当鼠标移动的时候,圆需要跟随鼠标移动,鼠标的当前位置就是圆心。我们的实现方案是:如果界面上还没有画圆,那么就新创建一个;如果已经存在,就直接更新其位置。这样能够避免先销毁,后创建的开销。

var circle = null;

function drawCircle(position)
{
	if(circle == null)
	{
		circle = GUI.Create(position);//创建1个圆
	}
	else
	{
		circle.updatePositon(position);//更新圆的位置
	}
}


这段代码没有什么问题,除了引入了全局变量circle,而实际上circle只会在drawCircle()函数中使用。也就说为了实现if-else的判断,我们不得不使用全局变量。有没有什么方式能够让函数拥有记忆功能,能够记住之前是否创建了圆。这样的话,我们就不用使用全局变量了。

var drawCircle = function(position)
{
	var circle = null;
	
	function innerFunc(position)
	{
		if(circle == null)
		{
			circle = GUI.Create(position);
		}
		else
		{
			circle.updatePositon(position);
		}
	}
	
	return innerFunc;
}();


这段代码能够正确的实现需要的功能,而且不会引入没有必要的全局变量。

var drawCircle = function(position)
{
	
}();

 

这段代码会定义1个作用域,大括号内部定义的变量和函数,对于外部都是不可见的。而且大括号内部的代码会立刻执行,代码 之前完之后将innerFunc赋值给drawCircle函数。这样的话,就能够缩小变量的作用域。 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值