でたらめJSシリーズ-匿名関数の自動運転


関数にはいろいろな種類があります.私たちはわからない関数を選んで勉強を始めます.
JSで自動運転される匿名関数
JavaScriptでは匿名関数(Javaを勉強するときにも同様の概念があり、匿名の実装クラス)が使用され、Java Scriptの関数も対象であり、メモリの一部を保存する必要があります.この関数を呼ぼうとすれば、私たちはこのメモリを見つけて実行するだけです.キーステップは以下の通りです.
  • は、関数オブジェクトを一つのメモリに保存する
  • .
  • このメモリを見つけました.
  • 普通は関数を使って名来でこの住所を探しますが、関数名を通してこのメモリアドレスを探すためのツールです.
    function test01(){
    
        console.log("    ");
    }
    //     
    test01();
    
    var test02 = function () {
        console.log("    ");
    }
    //     
    test02();
    上記の例では、私たちはこのメモリアドレスを関数名で見つけました.関数の実行、つまりこのメモリを見つけたら実行できます.
    匿名関数は、名前の関数がないという意味で、上記のtest 02関数式において匿名関数を作成し、その関数を変数test02に与え、test02で関数の呼び出しを行います.呼び出し方式は変数test02の後に括弧を入れることです.これは匿名関数の呼び出しの一つです.
    もう一つの匿名関数の呼び出しルールがあります.
  • 第一歩:関数
  • をFunctionキーワードで定義する.
  • 第二ステップ:括弧を使って内容をまとめます.
    キーステップ:これは文法の要求にすぎません.後の実行文はエンジンによって正確に認識されません.このように関数を定義すれば、エンジンはメモリを割り当てて保存します.
  • 第3ステップ:直接後ろに括弧を入れて呼び出しを完了し、パラメータ
  • に入れることができます.
    (function (x, y) {
        console.log(x+y);
    })(2, 3);
    //     
    var test03 = function(x,y){
        console.log(x+y);
    }(2,3);
    コード解析
    var log=(function(){
        console.log("      ");
        return function(param){
            console.log(param);
        };
    })();
    log("www.baidu.com");
    このコードは比較的古典的なコードです.ここで自動的に実行される匿名関数を作成しましたが、その戻り値は依然として匿名関数です.つまり、関数は運転後に戻ってきた結果は依然として関数です.戻り値の関数を変数のロゴに割り当てると、戻ってきた関数をロゴ変数で呼び出すことができます.
    上記のコードの中で、私達は実は2つのメモリ保存関数を含んでいます.自動運転の関数自体はメモリを持っています.実行している括弧に触れると自動的に動作します.また、戻ってきた関数を保存するメモリがあります.戻り値は実はこのメモリアドレスです.このようにlog変数はこの保存関数のメモリを指しています.したがって、関数の実行は、ロゴを使用して行うことができます.
    いくつかの面白い自動運転関数の定義方法
    //   2   ()        
    (function () { /* code */ } ()) //         
    (function () { /* code */ })() //             
      
    //     () JS &&,  ,                          
    //                     ,              
    var i = function () { return 10; } ();  
    true && function () { /* code */ } ();  
    0, function () { /* code */ } ();  
      
    //          ,        
    //       function           
    !function () { /* code */ } ();  
    ~function () { /* code */ } ();  
    -function () { /* code */ } ();  
    +function () { /* code */ } ();  
      
    //       ,  new   ,    ,           
    // http://twitter.com/kuvos/status/18209252090847232  
    new function () { /* code */ }  
    new function () { /* code */ } () //         ,       ()  
    
    void function(){  /* code */  }();