代码信息来自于http://ejohn.org/apps/learn/。

自执行,临时,函数

(function(){
var count = 0;
})();

这是一个简单的自执行匿名函数。

做一个点击计数

document.addEventListener("click", (function(){
var numClicks = 0;
return function(){
alert( ++numClicks );
};
})(), false);

关键代码是,自执行匿名函数,返回一个函数,点击就触发这个函数,根据闭包作用域链,可以访问自执行匿名函数的变量numClick。

为什么值相同?

for ( var d = 0; d < 3; d++ )
setTimeout(function(){
console.log( d );
//
//
//
}, 200);

在200ms的时候匿名函数运行三次,根据作用域链,它引用d,此时外部for早已循环完毕,d为3。

怎么才能正常输出?

for ( var d = 0; d < 3; d++ ) (function(d){
setTimeout(function(){
console.log( d );
  //0
  //1
//2
}, 200);
})(d);

这里里面的匿名函数引用的d实际是自执行函数的参数,函数执行三次,彼此独立,接收的参数依次为0,1,2。这是自执行函数的典型运用。

在包装库的时候,匿名函数十分有用。

(function(){
var myLib = window.myLib = function(){
// Initialize
}; // ...
})();

开发库时,我们要做到不影响全局命名空间。利用自执行匿名函数可以很好的坐到这一点,使得库内部的变量都是私有的,并可以选择性的对外部变量提供接口。

另一种写法

var myLib = (function(){
function myLib(){
// Initialize
} // ... return myLib;
})();

javascript高级知识点——临时作用域的更多相关文章

  1. JavaScript高级之词法作用域和作用域链

    主要内容: 分析JavaScript的词法作用域的含义 解析变量的作用域链 变量名提升时什么 一.关于块级作用域         说到JavaScript的变量作用域,与咱们平时使用的类C语言不同. ...

  2. JavaScript高级程序设计之作用域链

    JavaScript只有函数作用域:每个函数都有个作用域链直达window对象. 变量的查找由内而外层层查找,找到即止. 同时不仅可以查找使用,甚至可以改变外部变量. var color = &quo ...

  3. javascript高级知识点——闭包

    代码信息来自于http://ejohn.org/apps/learn/. 先给出一个权威的定义,函数对象可以通过作用域相互关联起来,函数体内的变量可以保存在函数的作用域内,这种特性称为闭包. 在闭包内 ...

  4. JavaScript高级知识点整理

    一.JS中的数组 1.数组的三种定义方式 (1).实例化对象 var aArray=new Array(1,2,3,4,5); (2).快捷创建 var aTwoArray = [1,2,3,&quo ...

  5. javascript高级知识点——函数的长度

    代码信息来自于http://ejohn.org/apps/learn/. 函数的长度属性如何工作? function makeNinja(name){} function makeSamurai(na ...

  6. javascript高级知识点——memoization

    memoization是一种非常有用的优化技术,它缓存特定输入产生的相应结果.这样麻烦的查找和迭代计算可以尽可能的减少. 它基本的思想是针对特定的输入,已经计算过的结果都是通过缓存当中的数据直接返回而 ...

  7. javascript高级知识点——指定上下文实现

    代码信息来自于http://ejohn.org/apps/learn/. 当我们将一个对象的点击事件绑定到一个事件触发元素时会发生什么? <ul id="results"&g ...

  8. javascript高级知识点——内置对象原型

    代码信息来自于http://ejohn.org/apps/learn/. 可以修改内置对象的方法. if (!Array.prototype.forEach) { Array.prototype.fo ...

  9. javascript高级知识点——继承

    代码信息来自于http://ejohn.org/apps/learn/. 继承是如何工作的 function Person(){} function Ninja(){} Ninja.prototype ...

随机推荐

  1. 【男性身材计算】胸围=身高*0.48(如:身高175cm的标准胸围=175cm*0.61=84cm);腰围=身高*0.47(如:身高175c… - 李峥 - 价值中国网

    [男性身材计算]胸围=身高*0.48(如:身高175cm的标准胸围=175cm*0.61=84cm):腰围=身高*0.47(如:身高175c- - 李峥 - 价值中国网 李峥:[男性身材计算]胸围=身 ...

  2. vsftpd配置---------------------之chroot_local_user和chroot_list_enable含义

    chroot_local_user和chroot_list_enable含义 很多情况下,我们希望限制ftp用户只能在其主目录下(root dir)下活动,不允许他们跳出主目录之外浏览服务器上 的其他 ...

  3. hdu 5623 KK's Number(dp)

    问题描述 我们可爱的KK有一个有趣的数学游戏:这个游戏需要两个人,有N\left(1\leq N\leq 5*{10}^{4} \right)N(1≤N≤5∗10​4​​)个数,每次KK都会先拿数.每 ...

  4. paip.oracle query export to insert sql

    paip.oracle query export to insert sql 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http:/ ...

  5. 运用Autoconf和Automake生成Makefile的学习之路

    作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...

  6. JavaScript 回车 焦点切换(摘抄)

    <!-- 这是回车转换行的代码段--> <script language='javascript' for='document' event='onkeydown'> if(e ...

  7. 【27前端】背景半透明rgba LESS实践

    今天有看到司徒正美<背景半透明rgba最佳实践>的文章和里面推荐的一个在线工具CSS背景颜色属性值转换  . 于是联系到自己的less库,新技能Get. 内容如下: /*在你的less库中 ...

  8. asp.net 页面跳转的方法

    目前知道有4种: 1超链接 2.response.redirect("urlString") 3.server.transfer("urlString") 4. ...

  9. chrome浏览器的桌面通知

    最近在使用朋友网(不加链接,避免有打广告的嫌疑),发现会出现提示“是否允许网站显示桌面通知?”,如下图所示: 这种做法,在页面加载完时直接调用请求,比起开心网的这种提示感觉有些野蛮了.开心网的桌面通知 ...

  10. .net 生成缩略图

    public static void CreateSmallImage(string minImageFullPath, System.Drawing.Image originalImage, int ...