码迷,mamicode.com
首页 > 编程语言 > 详细

javascript高级知识点——临时作用域

时间:2014-11-04 16:55:25      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   java   for   sp   

代码信息来自于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 ); 
    //2
    //2
    //2
 }, 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高级知识点——临时作用域

标签:style   blog   http   io   color   ar   java   for   sp   

原文地址:http://www.cnblogs.com/winderby/p/4073871.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!