Javascript変数関数浅分析
3418 ワード
一、変数はjavascript変数に2種類の値を保存できます.元の値と参照値です.
元の値はスタック上の単純なフィールド、すなわち変数が示す位置に直接値が格納されます.
参照値はスタック内のオブジェクトに格納され、スタック内の変数は、スタック内のオブジェクトを指すポインタ値を保存します.
javascriptには5種類の基本タイプがあります.Unidefined、Null、Boolean、Number、String.
参照の種類は、オブジェクトであり、他の言語のクラスのインスタンスの概念と類似しています.
new+タイプ名var obj=new object()
パラメータがなければ、var obj=new objectとも書くことができます.
オブジェクトの字面量でオブジェクトvar obj={}を生成することもできます.
二、関数はjavascriptの中で関数は対象で、javascriptの中で他のオブジェクトに対応するように関数を扱い、各関数は陰式に二つの追加のパラメータthisを追加します.
関数は、変数に値を割り当て、他のオブジェクトの属性として、他の関数のパラメータとして、戻り値として、文字通りの量で関数を作成することができます.
関数のコンテキスト:
オブジェクト指向言語でクラスのオブジェクトの現在の例をthisキーワードで引用します.javascriptの中のthisキーワードは対象言語に向かうthisとは違っています.javascriptでは、関数はオブジェクトであり、thisは現在の関数のコンテキストを呼び出します.
関数コンテキストは、call()とappy()の方法で明示できます.コール関数のコンテキストとしてCallの最初のパラメータを使用して、他のパラメータを呼び出し関数のパラメータとして入力します.Apple()とCall()は同じですが、2番目のパラメータは配列です.
関数内で定義されたパラメータと変数は、関数の外部では見られないものであり、関数内の任意の位置で定義された変数は、その関数のどこでも見られます.
クローズドとは、関数が関数外で定義される変数を使用して、関数が作成時のコンテキスト環境にアクセスできます.
また、ネットワークに広く伝わる内部関数を挙げて、外部関数の局所変数例にアクセスして、クローズドを説明します.該当するリスト項目のポップアップに対応する順序番号をクリックします.
元の値はスタック上の単純なフィールド、すなわち変数が示す位置に直接値が格納されます.
参照値はスタック内のオブジェクトに格納され、スタック内の変数は、スタック内のオブジェクトを指すポインタ値を保存します.
javascriptには5種類の基本タイプがあります.Unidefined、Null、Boolean、Number、String.
参照の種類は、オブジェクトであり、他の言語のクラスのインスタンスの概念と類似しています.
var b = true; //
var num = 20; //
var b = new Boolen(true); //
var num = new Number(20); //
通常オブジェクトを生成する方法:new+タイプ名var obj=new object()
パラメータがなければ、var obj=new objectとも書くことができます.
オブジェクトの字面量でオブジェクトvar obj={}を生成することもできます.
二、関数はjavascriptの中で関数は対象で、javascriptの中で他のオブジェクトに対応するように関数を扱い、各関数は陰式に二つの追加のパラメータthisを追加します.
関数は、変数に値を割り当て、他のオブジェクトの属性として、他の関数のパラメータとして、戻り値として、文字通りの量で関数を作成することができます.
関数のコンテキスト:
オブジェクト指向言語でクラスのオブジェクトの現在の例をthisキーワードで引用します.javascriptの中のthisキーワードは対象言語に向かうthisとは違っています.javascriptでは、関数はオブジェクトであり、thisは現在の関数のコンテキストを呼び出します.
関数コンテキストは、call()とappy()の方法で明示できます.コール関数のコンテキストとしてCallの最初のパラメータを使用して、他のパラメータを呼び出し関数のパラメータとして入力します.Apple()とCall()は同じですが、2番目のパラメータは配列です.
var obj = {
m:"hello"
}
var m="hi";
var say=function()
{
alert(this.m); //this
}
say();//hi,window
say.call(obj);// hello, obj
say.call(window);// hi,window
スコープ:関数内で定義されたパラメータと変数は、関数の外部では見られないものであり、関数内の任意の位置で定義された変数は、その関数のどこでも見られます.
var obj = function() {
var num = 1;
return { getValue: function() {
alert(num); //undefined
var num = 2;
alert(num); //2
}
}
} ();
obj.getValue();
包みを閉じるクローズドとは、関数が関数外で定義される変数を使用して、関数が作成時のコンテキスト環境にアクセスできます.
var hello = "hello word!";
function sayHello() {
alert(hello);
}
sayHello();
var obj = function() {
var value = 0;
return {
setValue: function(val) {
value += typeof val === 'number' ? val : 1;
},
getValue: function() {
return value;
}
}
} ();
obj.setValue('a');
alert(obj.getValue()); //1
最後の行の()は、関数が直ちに呼び出され、呼び出された結果を表す演算子です.したがって、objは参照関数ではなく、この関数を参照して返したオブジェクトのうちの一つは、2つの方法を含むオブジェクトであり、この2つの方法は、value変数にアクセスする特権を有している.また、ネットワークに広く伝わる内部関数を挙げて、外部関数の局所変数例にアクセスして、クローズドを説明します.該当するリスト項目のポップアップに対応する順序番号をクリックします.
test1
test2
test3
var test = function() {
var num = document.getElementsByTagName("li");
var i;
for (i = 0; i < num.length; i++) {
num[i].onclick = function() {
alert(i); // ,i 3,
// i , 3
}
}
alert(i); //3
}
test();
次のような書き方で正しい結果が得られます.
var test = function() {
var num = document.getElementsByTagName("li");
var i;
for (i = 0; i < num.length; i++) {
num[i].onclick = function(i) {
return function() {
alert(i + 1);
}
} (i); // i , onclick
//
}
alert(i); //3
}
test();