zoukankan      html  css  js  c++  java
  • javascript高级知识分析——函数访问

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

    可以通过函数的名字在它的内部引用它。

    function yell(n){ 
      return n > 0 ? yell(n-1) + "a" : "hiy"; 
    } 
    console.log( yell(4) === "hiyaaaa", "在函数的内部通过它的名字访问它自己" );

    当不通过命名函数来声明时,在其内部如何调用自己?

    var ninja = { 
      yell: function(n){ 
        return n > 0 ? arguments.callee(n-1) + "a" : "hiy"; 
      } 
    }; 
    console.log( ninja.yell(4) == "hiyaaaa", "arguments.callee 指的是函数自己" );

    函数的名字作用域失效。

    var ninja = function myNinja(){ 
      console.log( ninja === myNinja, "这个函数的引用和名字是同一个函数" ); 
    }; 
    ninja(); 
    console.log( typeof myNinja === "undefined", "但在函数外面不可以访问" ); 
    console.log( ninja );//function myNinja()

    注意,当我们使用命名函数声明再分配给一个变量时,这个函数的名字在内部可以引用,外部却不可以。而分配的变量都可以引用。

    当匿名函数为一个对象的属性时,也可以调用它。

    var ninja = { 
      yell: function(n){ 
        return n > 0 ? ninja.yell(n-1) + "a" : "hiy"; 
      } 
    }; 
    console.log( ninja.yell(4) === "hiyaaaa");//true

    通过这个对象的属性,我们可以调用它。

    当移除原对象时,会发生什么情况?

    var ninja = { 
      yell: function(n){ 
        return n > 0 ? ninja.yell(n-1) + "a" : "hiy"; 
      } 
    }; 
    console.log( ninja.yell(4) == "hiyaaaa"); //true
     
    var samurai = { yell: ninja.yell }; 
    var ninja = null; 
     
    try { 
      samurai.yell(4); 
    } catch(e){ 
      console.log( "不可以访问啦" ); 
    }

    同样的情况,但当我们给匿名函数一个名字时又会?

    var ninja = { 
      yell: function yell(n){ 
        return n > 0 ? yell(n-1) + "a" : "hiy"; 
      } 
    }; 
    console.log( ninja.yell(4) == "hiyaaaa"); 
     
    var samurai = { yell: ninja.yell }; 
    var ninja = null; 
    console.log( samurai.yell(4) == "hiyaaaa", "注意,它仍然可以调用这个函数" );
  • 相关阅读:
    微软O365使用教程:如何邀请客户试用
    Using the ForeFront Identity Manager to Configure SharePoint 2010’s User Profile Sync Service
    SharePoint2010文档归档策略
    转发:SP 2010: Find error messages with a Correlation ID token in SharePoint 2010
    用sql server的脚本导入Excel2010或Excel2013格式数据
    sharepoint2010的调查的问题总结
    暑假第一周进度报告
    暑假第四周进度报告
    暑假第三周学习进度报告
    暑假第二周进度报告
  • 原文地址:https://www.cnblogs.com/winderby/p/4063279.html
Copyright © 2011-2022 走看看