JSの研究の概要(2)機能

(A)関数を宣言

  1. ダイレクト量(リテラル)の文
    function f1(){
        ...
    }
  1. エクスプレス文ショー
    var f2 = function(){
        ...
    }
  1. 内蔵のコンストラクタ宣言(私はあまり触れませんので、この方法は、一般的に、まれではないんです)
    var f3 = new function();

(B)関数を呼び出します

  1. 直接関数呼び出しの量を宣言します
    f1();
    function f1(){
        console.log(111);
    }
    f1();

結果:

111
111

前と宣言した後に呼び出すことができます

  1. エクスプレスステートメントは、関数呼び出しを示してい
    f2();
    var f2 = function(){
        console.log(222);
    }
    f2();

結果:

    异常:f2不是一个方法(原因:js的变量和函数提升)
    222

唯一の最初のステートメントの呼び出しの後

(C)と関数パラメータの引数

アップデート後

(D)コールバック関数

1.場所場所ではなく、呼び出しよりもJSでのスコープの文でその機能、

関数は、特別なデータ型JS、あるので、関数のJs 2.は、第一級オブジェクトとして知られ
、その後JSコールバック関数を導いフォームハンドラにJSの値は、。

    //1.声明赋值变量a
    var a = 1;
    function f1(f){
        //3.进入f1()方法
        console.log(f);
        //4.声明赋值变量a
        var a = 2;
        //5.执行f()方法,也就是f2()【可以理解为指针或引用】,并寻找f2()声明处并执行
        f();
    }
    function f2(){
        //6.执行f2(),寻找变量a(先找到全局变量a,所以没有找到局部变量a,至于它为什么没有套娃执行和找不到局部a,这是js的运行原理,也就是js作用域链)
        console.log(a);
    }
    //2.将函数名f2传入函数f1内
    f1(f2);

結果:

[Function: f2]
1

(V)関数クロージャ

クロージャ変数は、他の機能の範囲にアクセスすることができる機能です。

パッケージは閉鎖されています。

1.キープスコープ

2.内部および外部のブリッジの機能

    //0.声明赋值全局a
    var a = 2;
    //0.声明方法f1()
    function f1(){
        //1.声明赋值局部a
        var a = 1;
        //2.声明方法f2()
        function f2(){
            //6.发现a,在作用域链中寻找a,首先找到了f1()的局部a,并打印
            console.log(++a);
        }
        //3.终止f1运行并返回f2的指针
        return f2;
    }
    //0.声明并运行f1()
    var f = f1();//4.f能够引用f2()方法,因为f还保留f2()的指针,所以f1()留在内存的数据暂且不能销毁。
    f();
    //5.执行f2(),因为f还保留f2()的指针,所以f1()留在内存的数据暂且不能销毁。
    f();
    //6.同上,因为始终保存着f1()的数据,所以以上修改的f1()的a一直都是一个值。
    f();
    //7.同上
    f();
    //8.同上

結果:

2
3
4
5

理由:
業績がF1、F2を返され、関数自体のスコープチェーンと範囲のそれ以降の問題されているので、F1の実行の最後までリードは、このようにクロージャを作成し、破壊された変数にすることはできません。

おすすめ

転載: www.cnblogs.com/fpgz99810/p/12227535.html