javascript-function-関数は基本から閉鎖まで詳しく説明します.

4696 ワード

javascript–基本関数から閉鎖まで詳しく説明します.
1)関数定義、関数:コードのグループ形式は、このような形でコードのグループに名前を付けて、後で再利用する時に呼び出すことができます.
2)、関数構成、a.function子文(データタイプ).b.関数名は、匿名関数と呼ばれる関数がなくてもよい.c.関数が実行するコードブロックを関数体と呼びます.d.関数パラメータ、0から複数のブラウザはそれぞれ違っています.Googleは最大で10万個以上のサポートができます.呼び出し時はマルチパスとマルチパスではなく、パラメータはundefinedとなり、マルチパスは無視されます.各関数には内部で構築されたアーグメンツ配列があります.関数で受け付けたすべてのパラメータを返すことができます.e.returnサブ句は、関数には通常、リターンが表示されていません.undefinedに戻ります.
3)申明関数は、まず、JavaScriptにおいて、実際にはデータタイプであり、関数変数に対してtypeofを呼び出すと、functionに戻ります.申明には、2つの中の方式があります.a.function foo(){return 1;}b.var foo=function(){return 1;}第2の説明方法は、一般に関数標識記法と呼ばれます.関数には2つの特性があります.a.彼らはコードを含んでいます.b.彼らは実行可能です.関数も変数に値を付けるデータですので、deleteを使って関数delete fooを削除できます.コール関数はメソッド名に()を付けさえすればいいです.(匿名関数の定義後に自分で一回実行します.後に()を追加しないと実行できません.)
4)関数のいくつかの特別な形式a.匿名関数の匿名関数は名前の通り、関数に名前を定義していません.実はjavascriptの中で一つのデータタイプのオブジェクトは変数に割り当てられていません.名前も与えられていません.つまり匿名データです.私達の下のコードnullのようです.123;これらのコードはいずれも匿名のデータと呼ぶことができます.匿名関数は主に2つの用途があり、最初は匿名のコールバック関数であり、匿名関数をパラメータとして他の関数に渡す.(jqueryにはしばしばパラメータがセグメントコードについて現れます.)主な利点:1、名前のない変数で関数を伝えることができます.これは大域変数を節約できることを意味します.2,関数の呼び出し操作を別の関数に委託できます.3,性能を向上させる(プライベートエリアはデータを保存し、実行後は破壊し、常駐メモリを避ける.).
二つ目は自己調整関数で、関数は定義後に自分で実行します.いくつかの一括または初期化タスクを実行します.主要な利点:グローバル変数は一切生成されません.主な欠点:繰り返し実行できません.サイクルや他の関数に入れない限り、
b.内部関数の内部関数とは、大域関数を説明すると同時に、その内部にも関数を説明します.作用領域の関係のため、内部関数は親関数の外部では見られないので、この内部関数を私有関数と呼ぶこともできます.プライベート関数の利点:1、グローバル名前空間の清浄性を確保するのに役立ちます.2,プライベート性-これにより、必要な関数だけを调节者に暴露し、プライベートな行为を隠すことができ、パッケージ化の効果が得られます.
c.戻り関数の関数には戻り値があります.戻り値を表示しないとundefinedが返されます.関数としては以前に言及したのもデータですので、関数の戻り値は関数でもあります.次の例は面白いです.
    function foo(){
        alert('A');
        return function(){
            alert('B');
        };
    }
    var f = foo();
    f();
var f=foo()を実行しますA'だけがイジェクトされ、f()を実行してこそ、「B」がイジェクトされます.AとBを連続して一つのコードでイジェクトするなら、var f=foo()と書いてもいいです.同時に2回呼び出す.
d.自分の関数を書き換えると、もう一つの関数が戻ってくるので、新しい関数を使って古いものを上書きすることができます.前の例はこのように書くことができます.
    function foo(){
        alert('A');
        return function(){
            alert('B');
        };
    }
    foo = foo();
この言葉はまずAを弾いてから、リターン関数を使ってfooを上書きします.上は外部で自分の関数を書き換えます.もちろん内部でもカバーできます.
    function foo(){
        alert('A');
        foo = function(){
            alert('B');
        };
    }
外部ではグローバル変数として定義されていますが、関数内部では直接使用できます.
5)クローズドは、クローズドする前にjavaScriptの役割領域と語法の役割領域を説明します.a)、作用域:javaScriptには大きな括弧レベルの作用領域は存在しませんが、関数の作用領域があります.つまり、関数の内部で定義されている変数は、関数の外では見られません.しかし、関数の外で定義された変数は、関数の内部で見られます.関数の外に定義された変数は、相対関数としては「親レベル」のスコープで、関数は「親レベル」のスコープ変数を操作できます.逆にダメです.b)、語法のスコープはjavaScriptの中にあります.それぞれの関数には独自のスコープがあります.つまり、それぞれの関数は定義された時(実行ではなく)自分の環境があります.(作用領域)は、1つの関数が自身とグローバルスコープの内容にのみアクセスできます.
c)クローズドパケットを利用してドメインチェーンを突破して、どのように作用ドメインチェーンを突破しますか?彼らをグローバル変数(var文を使用しません)にアップグレードしたり、関数を通してグローバル変数に伝達(またはリターン)したりすればいいです.このスコープ内の変数または変数が現在戻ってくる値ではなく、関数によって結合されたスコープ自体が必要です.(説明すると、クローズド関数が実行されている限り、複数のクローズドされているオブジェクトがクローズドされている同じ変数を指す場合、クローズドされているオブジェクトの値は同じです.同じ参照ですので)
var getValue,setValue;
(function(){
    var secret = 0;
    getValue = function(){
        return secret;
    };
    setValue = function(v) {
        secret = v;
    }
})();
クローズドは確かに多くのメリットがありますが、欠点もあります.メモリ漏れを引き起こしやすく、出費が大きいです.