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

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

让你的javascript函数拥有记忆功能,降低全局变量的使用的更多相关文章

  1. javascript函数的基础功能

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  2. 常用Javascript函数与原型功能收藏

    // 重复字符串 String.prototype.repeat = function(n) { return new Array(n+1).join(this); } // 替换全部 String. ...

  3. 深入浅出JavaScript函数 v 0.5

    本文的观点是建立在<JavaScript权威指南 6th Ed> <JavaScript高级编程 3th Ed> <JavaScript精粹 2th Ed>之上, ...

  4. javascript函数没有重载测试

    今天继续学习javascript系列教程,虽然是基础,但我觉得还是有必要用心来学习的,不要怕难,不用怕忘记,不要怕学不会.哪个高手不是从零开始的,我要坚定自己的学习信心,并且认真的走下去.虽然路途艰辛 ...

  5. 第八章:Javascript函数

    函数是这样一段代码,它只定义一次,但可能被执行或调用任意次.你可能从诸如子例程(subroutine)或者过程(procedure)这些名字里对函数概念有所了解. javascript函数是参数化的: ...

  6. JavaScript语言精粹读书笔记 - JavaScript函数

    JavaScript是披着C族语言外衣的LISP,除了词法上与C族语言相似以外,其他几乎没有相似之处. JavaScript 函数: 函数包含一组语句,他们是JavaScript的基础模块单元,用于代 ...

  7. [转]JavaScript函数和数组总结

    转自:http://www.uml.org.cn/AJAX/201307264.asp 写的不错,对我有很多帮助,最近准备全面的学习研究一下ES5,先转载一下这篇文章. JavaScript函数 1. ...

  8. javascript 函数介绍

    javascript函数使用的时候,往往都比较单一,这里介绍几种不同于我们之前使用的函数调用方式! 1.函数表达式包含名称,用于递归 var f = function s(num) { if (num ...

  9. 第一百零二节,JavaScript函数

    JavaScript函数 学习要点: 1.函数声明 2.return返回值 3.arguments对象 函数是定义一次但却可以调用或执行任意多次的一段JS代码.函数有时会有参数,即函数被调用时指定了值 ...

随机推荐

  1. 【DataStructure】Description and usage of queue

    [Description] A queue is a collection that implements the first-in-first-out protocal. This means th ...

  2. css_day5

  3. H5移动端性能优化

    概述 1. PC优化手段在Mobile侧同样适用 2. 在Mobile侧我们提出三秒种渲染完成首屏指标 3. 基于第二点,首屏加载3秒完成或使用Loading 4. 基于联通3G网络平均338KB/s ...

  4. Android开发记录(转)

    一.Android模拟器相关 1. Android模拟器安装 Market 模拟器默认没有安装 Market,看到网上有较为复杂的安装方法,也有1个简单的,试了简单的,在 Android2.2 模拟器 ...

  5. MJRefresh(上拉加载下拉刷新)

    整理自:https://github.com/CoderMJLee/MJRefresh#%E6%94%AF%E6%8C%81%E5%93%AA%E4%BA%9B%E6%8E%A7%E4%BB%B6%E ...

  6. 自定义带弹性效果的pageControl

    分三部分实现,在drawrect方法里画出灰色背景,根据pageCount创建对应个数的dotView放置在对应位置,并隐藏,创建一个CAShapeView类型的layer,根据scrollView的 ...

  7. Link-Cut-Tree题目泛做(为了对应自己的课件)

    题目1:BZOJ 2049 洞穴勘测 #include <bits/stdc++.h> #define L(x) c[x][0] #define R(x) c[x][1] using na ...

  8. ARM编译空间属性(转)

    原文地址:http://www.cnblogs.com/hongzg1982/articles/2205093.html 1. 程序的空间属性 一般情况下,一个程序本质上都是由 bss段.data段. ...

  9. (转) class II

    Overloading operators   Classes, essentially, define new types to be used in C++ code. And types in ...

  10. SqlServer日期查询

    一.sql server日期时间函数 Sql Server中的日期与时间函数 1.  当前系统日期.时间 select getdate() 2. dateadd  在向指定日期加上一段时间的基础上,返 ...