javascript学習ノート(3)
javascriptの関数は主に以下のいくつかの方面に使用できます.に変数を割り当てます. は、オブジェクトに属性を与えます. は、パラメータとして他の関数に導入される. は、他の関数の戻り値として機能する. は字面量で作成されます. a:function(){} }このような方式で作成しますか?
javascript関数のパラメータは、定義関数に何らかの形のパラメータが付加されていなくても、任意の多パラメータの着信関数を処理することができます.この原理は、javascriptが処理関数と他のプログラミング言語とは異なり、解釈器が関数に伝達するのは、数セットの内部値と類似しています.
javascriptの関数文脈:java/Cでは、メソッドはオブジェクトに依存していますが、javascriptでは関数もオブジェクトであり、対立しています.オブジェクトの属性、方法としてもいいし、他のオブジェクトの関数としてもいいです.関数の上下も変化していますので、関数の中のthis呼び出しも変化します.l方法とappy方法は関数のコンテキストを変えます.
call方法とappy方法の使用は、以下のコードセグメントで示します.
javascript関数のパラメータは、定義関数に何らかの形のパラメータが付加されていなくても、任意の多パラメータの着信関数を処理することができます.この原理は、javascriptが処理関数と他のプログラミング言語とは異なり、解釈器が関数に伝達するのは、数セットの内部値と類似しています.
function sum(){
var result = 0;
for(var i = 0, len = arguments.length; i < len; i++){
var current = arguments[i];
if(isNaN(current)){
throw new Error("not a number exception");
}else{
result += current;
}
}
return result;
}
javascriptのスコープは関数のスコープであり、ブロックのスコープがない.function func(){
for(var i=0;i<arguments.length;i++){
print(arguments[i]);
}
print(i);
}
func('a','b','c');
javascriptの関数は局所的な作用領域で動作し、その外部作用領域内の変数と関数にアクセスできます.を選択します.javascriptのスコープは語法のスコープです.関数定義ではなく実行中に決定されます.以下の関数は関数実行時に、初めてstrを印刷します.関数のスコープ内で定義されていない変数strにアクセスするとundefinedが印刷されます.var str="global";
function func(){
print(str);
var str="private";
print(str);
}
func();// undefined private
以上のコードセグメントについて詳細に説明します.第一行で定義されたstrは、globalをそれに割り当て、定義時に作用域チェーンの頭であるグローバル作用領域に配置されます.Fncを呼び出すと、javascript解釈器はコールバーを生成します.を選択して、funcでvarで定義された変数を属性として設定し、次にcall objectを役割領域の一番先に置いて、最も優先的なアクセス権を持っています.strにアクセスする時、まずFncの訪問先を調べて、その変数の定義があるかどうかを調べます.見つからない場合は、グローバル作用領域を検索します.コードセグメントでは、funcのcall objectでstrを検索して、strが大域作用領域をカバーするstrを見つけましたが、strを呼び出した時には、この関数体にはまだ割り当て値が定義されていませんので、undefinedが印刷されます.javascriptの関数文脈:java/Cでは、メソッドはオブジェクトに依存していますが、javascriptでは関数もオブジェクトであり、対立しています.オブジェクトの属性、方法としてもいいし、他のオブジェクトの関数としてもいいです.関数の上下も変化していますので、関数の中のthis呼び出しも変化します.l方法とappy方法は関数のコンテキストを変えます.
call方法とappy方法の使用は、以下のコードセグメントで示します.
var jack={
name:'jack',
age:20
};
var rose={
name: 'rose',
age:19
};
function printName(){
return this.name;
};
print(printName.call(jack));// jack
print(printName.call(rose));// rose
print(printName.apply(jack));
print(printName.apply(rose));
一つのパラメータが入ってきた場合、call方法とappy方法は同じです.複数のパラメータが入ってきた場合、call方法とappy方法は異なります.違いは主に以下のコードセグメントで示します.function setName(name){this.name=name}; setName.apply(jack,["jack Recpt"]); print(printName.call(jack));
jack Recptとして印刷します applyの2番目のパラメータは、関数としてパラメータグループの1つの配列が必要です.setName.call(rose,"rose jizz ");print(printName.call(rose));
ローサジーzcalとして印刷するにはいくつかのパラメータが必要です.パラメータはカンマで区切られます.