javascript中运用闭包和自执行函数解决大量的全局变量问题

 更新时间:2010年12月30日 19:56:15   作者:  
做为一个javascript新手,为了程式的简便,可能会在javascript中运用了大量的全局变量,虽然一时看来,问题解决了,而且也可能让编码变得更加的简单。
但是从全局看来,这样会导致出现一些让我们难以掌控的情况的出现:变量同名、多个函数共用一个全局变量后的值的变换……等等。所以,有时候,对于一些简单的全局变量,我们可以通过另一种方式来处理——用自执行函数+闭包的方法来解:

比如:我们要在网页加载时给出一个提示,在网页关闭时给出另一个提示
下面的代码,实现了以上功能
复制代码 代码如下:

var msg1 = "欢迎光临!"; // 定义一个全局变量
var msg2 = "再见!" //定了另一个全局变量
window.onload = function() {
  alert(msg1);
}
window.onunload = function() {
  alert(msg2);
}

这段代码中已经用到了两个全局变量。而只是为了实现一个简小的功能。
而且,全局变量太多,我们必须记住:msg1是欢迎时的变量,msg2是关闭时变量……如果变量更多,我们还能记得住吗?


下面是同样的功能,不过运用了自执行函数+闭包方法:
复制代码 代码如下:

(function() {
  var msg = "Hello, world!";
  window.onload = function() {
    alert(msg);
  }
})();

(function() {
  var msg = "Hello, world!";
  window.onunload = function() {
    alert(msg);
  }
})();

后者做法,虽然代码增长了,但是:
1)msg变量只在各自的自执行函数内有效。不会和其它全局变量之间产生混淆。
2)代码的结构变得更加的清晰。
3)解决了大量使用全局变量的情况。

以上只是本人的一点认识,希望真正的高手给出点评!

相关文章

  • JS中new Date().Format("yyyy-MM-dd") 报错的解决

    JS中new Date().Format("yyyy-MM-dd") 报错的解决

    这篇文章主要介绍了JS中new Date().Format("yyyy-MM-dd") 报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 文章或博客自动生成章节目录索引(支持三级)的实现代码

    文章或博客自动生成章节目录索引(支持三级)的实现代码

    一个好的博文除了博文的质量要好以外,好的组织结构也能让读者阅读的更加舒服与方便,我看很多网站里面有一些园友的博文都是分章节的,并且在博文的前面都带有章节的目录索引,点击索引之后会跳转到相应的章节阅读
    2020-05-05
  • 教你用JS获取Headers头部信息

    教你用JS获取Headers头部信息

    这篇文章主要给大家介绍了关于用JS获取Headers头部信息的相关资料,头部信息是在JavaScript中进行网络请求时常用的操作,Headers 头部信息包含了请求或响应的元数据,需要的朋友可以参考下
    2023-09-09
  • JavaScript调试之console.log调试的一个小技巧分享

    JavaScript调试之console.log调试的一个小技巧分享

    日常开发中经常会需要console来查看当前对象的值。当然用debugger会更全面的查看,但是总有只喜欢用console的,比如我。下面这篇文章主要给大家分享了关于JavaScript调试之console.log调试的一个小技巧,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • 如何用JS/HTML将时间戳转换为“xx天前”的形式

    如何用JS/HTML将时间戳转换为“xx天前”的形式

    如果我们有一份过去时间戳,如何使用JS/HTML将时间戳转换为“xx天前”的形式呢?很多朋友都觉得解决办法有点困难,其实很简单的,下面小编给大家分享完整的实现代码,一起看看吧
    2017-02-02
  • 解决uni-app微信小程序input输入框在底部时,键盘弹起页面整体上移问题

    解决uni-app微信小程序input输入框在底部时,键盘弹起页面整体上移问题

    问题是这样的input 获取焦点时会自动调起手机键盘,设置 :adjust-position="true",会导致键盘弹起时页面整体上移,这篇文章主要介绍了解决uni-app微信小程序input输入框在底部时,键盘弹起页面整体上移问题,,需要的朋友可以参考下
    2022-08-08
  • Javascript 学习书 推荐

    Javascript 学习书 推荐

    前一段时间看了一本javascript的书,书名为Javascript DOM 高级程序设计 由【加】Jeffrey Sambells和【美】
    2009-06-06
  • javascript从作用域链谈闭包

    javascript从作用域链谈闭包

    这篇文章主要从作用域链谈闭包,闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现,本文针对闭包进行学习,需要的朋友可以参考下
    2015-12-12
  • JavaScript 中 avalon绑定属性总结

    JavaScript 中 avalon绑定属性总结

    avalon是前端MVVM框架,在js中经常会用到。这篇文章主要介绍了JavaScript 中 avalon绑定属性总结的相关资料,需要的朋友可以参考下
    2016-10-10
  • JS中使用gulp实现压缩文件及浏览器热加载功能

    JS中使用gulp实现压缩文件及浏览器热加载功能

    这篇文章主要介绍了JS中使用gulp实现压缩文件及浏览器热加载功能,需要的朋友可以参考下
    2017-07-07

最新评论