ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript 変数関数の簡単な分析_JavaScript スキル

Javascript 変数関数の簡単な分析_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 18:02:37972ブラウズ
1. 変数
JavaScript の変数に格納できる値は、元の値と参照値の 2 種類があります。
元の値はスタック上の単純なフィールドに保存されます。つまり、値は変数でマークされた場所に直接保存されます。
参照値はヒープ内のオブジェクトに格納され、スタック変数にはヒープ内のオブジェクトを指すポインタ値が格納されます。
JavaScript には 5 つの基本的な型があります: 未定義、Null、ブール、数値、文字列。
参照型は実際にはオブジェクトであり、他の言語のクラス インスタンスの概念と似ています。
コードをコピーします コードは次のとおりです。

var b = true; stack
var num = 20; // スタックに格納されます
var b = new Boolen(true) // ヒープに格納されます
var num = new Number(20);ヒープ

オブジェクトを生成する通常の方法:
新しい型名 var obj = new object()
パラメータがない場合は、var obj = new と書くこともできます。 object;
オブジェクト リテラルも使用できます。 数量生成 object var obj = {}
2. 関数
JavaScript では、関数は JavaScript の他のオブジェクトと同様に扱われます。各関数には、暗黙的に付加された 2 つの追加パラメータ (引数) があります。
関数は、変数に割り当てる、他のオブジェクトの属性として使用する、他の関数のパラメータとして使用する、戻り値として使用することができ、リテラルを使用して関数を作成することもできます。
関数コンテキスト:
オブジェクト指向言語では、クラス オブジェクトの現在のインスタンスを参照するために this キーワードを使用します。 JavaScript の this キーワードは、オブジェクト指向言語の this とは異なります。 JavaScript では、関数はオブジェクトであり、これは現在の関数が呼び出される関数コンテキストを指します。
call() メソッドと apply() メソッドを通じて関数コンテキストを明示的に指定できます。 Call の最初のパラメータは呼び出し元関数のコンテキストとして使用され、他のパラメータは呼び出される関数のパラメータとして呼び出される関数に渡されます。 apply() は、2 番目のパラメーターが配列であることを除いて、Call() に似ています。
コードをコピー コードは次のとおりです:

var obj = {
m: "hello"
}
var m="hi";
var Say=function()
{
alert(this.m); //this は関数呼び出しコンテキストを指します
}
say();// こんにちは、window は呼び出しコンテキストです
say.call(obj);// こんにちは、obj はこの時点での関数呼び出しコンテキストです
say.call(window) );// こんにちは、ウィンドウはコンテキストを呼び出しています

スコープ:
関数内で定義されたパラメーターと変数は関数の外部には表示されません。また、関数内のどこかで定義された変数は関数内のどこにも表示されません。どこにでも機能が表示されます。
コードをコピー コードは次のとおりです。

var obj = function() {
var num = 1;
return { getValue: function() {
alert(num); //2
}
}
} ();
obj.getValue();


クロージャ
いわゆるクロージャとは、関数が関数の外で定義された変数を使用できることを意味します。 、関数はコンテキストの作成時に変数にアクセスできます。


コードをコピーします コードは次のとおりです。
var hello = "hello word!";
関数 SayHello() {
alert(hello);
sayHello();
var obj = function() {
var value = 0;
setValue: function(val) {
value = typeof val === 'number' ? val : 1;
},
getValue: function() {
戻り値; >}
}
} ();
obj.setValue('a')
alert(obj.getValue()); //1


最後の行 () に注目してください。() は呼び出し演算子です。これは、関数がすぐに呼び出され、呼び出し結果を返すことを意味します。したがって、obj は関数を参照するのではなく、2 つのメソッドを含む関数によって返されるオブジェクトを参照し、これら 2 つのメソッドは value 変数にアクセスする特権を享受します。
クロージャを説明するために、インターネット上で広く流通している外部関数のローカル変数にアクセスする内部関数の別の例を見てみましょう。対応するリスト項目をクリックすると、対応するシーケンス番号がポップアップ表示されます。



コードをコピー
コードは次のとおりです:

  • test1

  • test2

  • test3

  • var test = function() {
    var num = document.getElementsByTagName("li"); num.length; i ) {
    num[i].onclick = function() {
    alert(i); //内部関数は外部関数変数にアクセスできます、i の最終値は 3、
    / /コンストラクター内の i 値の代わりに、 3
    }
    }
    alert(i); //3
    }

    次の書き方で正しい結果が得られます:



    コードをコピーします
    コードは次のとおりです: var test = function() { var num = document.getElementsByTagName("li");
    var i;
    for (i = 0; i num[i].onclick = function(i) {
    return function() {
    alert(i 1);
    } (i);コンストラクターは実行のために i 値をすぐに渡します。これで、onclick にバインドされた関数は、
    //line
    }
    alert(i); //3
    の実行後に返される関数になります。
    テスト( );

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。