zoukankan      html  css  js  c++  java
  • 让你的javascript函数拥有记忆功能,降低全局变量的使用

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

    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函数。这种话。就行缩小变量的作用域。 

     

     

  • 相关阅读:
    P1121 环状最大两段子段和
    无题
    cdoj 1485 柱爷搞子串 sam treap
    自然数幂和
    Gym 100341C AVL Trees NTT
    线性筛分解质因子
    codeforces 366 Ant Man dp
    UVALive 6914 Maze Mayhem 轮廓线dp
    hdu 5790 Prefix 字典树 主席树
    莫比乌斯反演个人小结
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5222609.html
Copyright © 2011-2022 走看看