zoukankan      html  css  js  c++  java
  • javascript高级知识点——临时作用域

    代码信息来自于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; 
    })();
  • 相关阅读:
    Oracle 备份脚本
    Centos 安装DBI和ORACLE DBD
    人生到此初相见——北漂18年(10)
    备份上个月的日志
    mysql 授权
    竹杖芒鞋轻胜马,一蓑烟雨任平生——写在38岁生日
    haproxy 跨域访问:
    redis 配置说明
    vsftpd 500 OOPS: bad bool value in config file for: anon_world_readable_only
    vsftpd 配置虚拟用户
  • 原文地址:https://www.cnblogs.com/winderby/p/4073871.html
Copyright © 2011-2022 走看看