zoukankan      html  css  js  c++  java
  • JavaScript闭包

    一:Js变量的作用域

    全局变量:

    1 <script type="text/javascript">
    2     var a=22;//全局变量
    3     function func(){
    4         alert(a);
    5     }
    6     func();
    7 </script>

    局部变量

    1 <script type="text/javascript">
    2     function func(){
    3         var a=22;
    4     }
    5     func();
    6     alert(a);
    7 </script>

    局部变量不可以直接读取!

    二:从外部读取方法内部的局部变量(使用闭包!)

     1  <script type="text/javascript">
     2  function func(){ 
     3  var a=22;
     4          function func2(){
     5             alert(a);
     6          }
     7         return func2();
     8      }
     9     var result=func;
    10      result();
    11  </script>

    三:闭包的概念

    各种专业文献上的“闭包”(closure)定义非常抽象,很难看懂。实际上,闭包就是能够读取其他函数内部变量的函数。

    由于在JavaScript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。

    所以本质上,闭包就是将函数内部和函数外部连接在一起的一座桥梁。

    四:闭包的用途

    一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

    五:闭包的使用注意点

    1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中肯能会导致内存泄漏。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

    2)闭包会在父函数外部,改变父函数内部变量的值,所以如果你把父函数当做对象使用,把闭包当做他的公用方法(Public Method),把内部变量当做它的私有属性(Private value),这时候一定要小心,不要随便改变父函数内部变量的值。

     1 <script type="text/javascript">
     2     var name="The window";
     3     var object={
     4         name:"My object",
     5         getNameFunc:function(){
     6             return function(){
     7                 return this.name;
     8             };
     9         }
    10     };
    11     alert(object.name);
    12     alert(object.getNameFunc()());
    13 </script>
  • 相关阅读:
    关于object和embed
    关于跨域问题的解决办法
    SQL 中 SELECT 语句的执行顺序
    sql子查询 嵌套SELECT语句
    PL/SQL中SELECT总结
    SQL Server
    SQL Server SELECT逻辑处理顺序
    SQL 基础:Select语句,各种join,union用法
    sql基础知识(新手必备)
    mysql处理海量数据时的一些优化查询速度方法
  • 原文地址:https://www.cnblogs.com/zyxsblogs/p/9992338.html
Copyright © 2011-2022 走看看