JavaScriptの関数はなぜ一等公民ですか?
3938 ワード
あなたが承认するかどうかに関わらず、いかなる人も社会环境の中で潜在的なのは369等に分けられて、JavaScriptの中の関数は1等の公民です.
関数とは何ですか
関数は、functionキーで定義されたグループで特定の機能を実行するためのステートメントです.関数の定義には3つの方法があります.関数宣言、関数式、およびコンストラクタ.
関数宣言
関数は再ロードされていません
関数宣言と関数式の違い1、関数宣言は関数名とfunctionの後、関数式は関数を変数に割り当てます.2、関数宣言はコードの任意の位置で呼び出すことができます.制限されていません.関数式は呼び出し前に定義されなければなりません.
ポイント:すべての関数のパラメータは値によって伝達されます.
つまり、関数の外部の値を関数内部のパラメータにコピーするのは、一つの変数から他の変数に値をコピーするのと同じです.基本型の値の伝達は、基本型変数のコピーと同じであり、参照型の値の伝達は、参照型変数のコピーと同じである.上の話を理解するのはちょっと大変です.コピーである以上、基本タイプのコピーではなく、相互に影響を与えません.引用タイプのコピーは相互に影響しますか?なぜ値によって伝達されるのかは引用によって伝達されるのではないですか?
基本的なタイプのパラメータを関数に渡すと、伝達された値は関数内の局所変数にコピーされ、参照タイプの値が伝達されると、その参照タイプのポインタアドレスは関数内の局所変数にコピーされ、局所変数が変化すると関数の外部に反映されます.例を挙げます
関数のパラメータが一つの数字を伝達し、関数内部の修正後
つまり、関数パラメータは局所変数です.
主題に戻ると、JavaScript関数はなぜ一等公民ですか?
プログラミング言語では、1等公民はいくつかの条件があります.関数パラメータとして、関数として値を返し、変数に値を割り当てることができます.
上の条件によって、JavaScriptのデータはすべて一等公民と見なされます.基礎データの種類も引用タイプもすべて上記の条件を満たしています.一般的にJavaScript関数は一等公民で、実際には他のプログラミング言語に比べて、すべてのプログラミング言語の関数が上記の条件を満たすというわけではないからです.
以下では、JavaScriptの関数が上記の3つの条件をどのように満たすかを具体的に紹介します.
関数をパラメータとして
実は私たちがよく話している関数のコールバックです.例を挙げます
関数を返します.
たとえば、閉じます
関数を変数として使う
関数は一等公民として関数式プログラミングの基礎です.高次関数は関数をパラメータの関数として用い,Reactにおける高次構成要素も高次関数として理解できる.
関数とは何ですか
関数は、functionキーで定義されたグループで特定の機能を実行するためのステートメントです.関数の定義には3つの方法があります.関数宣言、関数式、およびコンストラクタ.
関数宣言
function sum(num1,num2){
return num1+num2;
}
関数式var sum=function(num1,num2){
return num1+num2;
}
構造関数var sum = new Function('num1', 'num2', 'console.log( num1 + num2)');
sum(2, 6);
構造関数の3番目のパラメータはJavaScript文を含む文字列です.関数は再ロードされていません
function addNumber(num){
return num+10;
}
function addNumber(count){
return count+20;
}
addNumber(10);//30
上の2つの関数名は同じですが、パラメータと計算方法が違っています.結果としては、前の関数をカバーした後の関数が実行されます.実際には下記のコードと区別がありません.var addNumber=function(num){
return num+10;
};
addNumber=function(count){
return count+20;
}
addNumber(10);//30
関数名は、ポインタとして認識され、同じ関数名は同じポインタを指します.関数宣言と関数式の違い1、関数宣言は関数名とfunctionの後、関数式は関数を変数に割り当てます.2、関数宣言はコードの任意の位置で呼び出すことができます.制限されていません.関数式は呼び出し前に定義されなければなりません.
console.log(addNumber(10));//20
function addNumber(num){
return num+10;
}
console.log(addNumber(10));//Uncaught TypeError: addNumber is not a function
var addNumber=function(num){
return num+10;
};
コードをもう一度見てくださいfunction addNumber(num){
return num+10;
}
var addAnotherNumber=function addNumber(count){
return count+20;
}
console.log(addAnotherNumber.name);//addNumber
関数の表式は必ずしも匿名関数ではなく、関数の後の表式の関数名をFunctionの後の関数名として指定します.ポイント:すべての関数のパラメータは値によって伝達されます.
つまり、関数の外部の値を関数内部のパラメータにコピーするのは、一つの変数から他の変数に値をコピーするのと同じです.基本型の値の伝達は、基本型変数のコピーと同じであり、参照型の値の伝達は、参照型変数のコピーと同じである.上の話を理解するのはちょっと大変です.コピーである以上、基本タイプのコピーではなく、相互に影響を与えません.引用タイプのコピーは相互に影響しますか?なぜ値によって伝達されるのかは引用によって伝達されるのではないですか?
基本的なタイプのパラメータを関数に渡すと、伝達された値は関数内の局所変数にコピーされ、参照タイプの値が伝達されると、その参照タイプのポインタアドレスは関数内の局所変数にコピーされ、局所変数が変化すると関数の外部に反映されます.例を挙げます
関数のパラメータが一つの数字を伝達し、関数内部の修正後
function addNumber(num){
num=num+10;
console.log(num);//20
}
var num=10;
addNumber(num);
console.log(num);//10
オブジェクト属性を関数内部で修正すると、外部オブジェクトも変化します.function setName(obj){
obj.name=" "
console.log(obj.name);//
}
var obj={
name:" "
};
setName(obj);
console.log(obj);//obj.name=" "
これは上に述べたものと矛盾を伝える値ではないですか?コードをいくつか修正してみます.function setName(obj){
obj.name=" "
obj=new Object();
obj.name=" ";
console.log(obj.name);//
}
var obj={
name:" "
};
setName(obj);
console.log(obj);//obj.name=" "
このコードは上記との違いは、Objが関数に伝達された後、その属性nameが新たに割り当てられ、新たなオブジェクトを作成してobjに割り当て、またObj.nameを修正します.objが参照によって伝達されるならば、objを修正しても関数の外部に反映されるはずですが、元の参照は変わりません.関数内部でObjを書き換えた後、実際に新しいオブジェクト参照が作成されました.この変数参照は局所変数で、関数が実行された後に破棄されます.つまり、関数パラメータは局所変数です.
主題に戻ると、JavaScript関数はなぜ一等公民ですか?
プログラミング言語では、1等公民はいくつかの条件があります.関数パラメータとして、関数として値を返し、変数に値を割り当てることができます.
上の条件によって、JavaScriptのデータはすべて一等公民と見なされます.基礎データの種類も引用タイプもすべて上記の条件を満たしています.一般的にJavaScript関数は一等公民で、実際には他のプログラミング言語に比べて、すべてのプログラミング言語の関数が上記の条件を満たすというわけではないからです.
以下では、JavaScriptの関数が上記の3つの条件をどのように満たすかを具体的に紹介します.
関数をパラメータとして
実は私たちがよく話している関数のコールバックです.例を挙げます
element.addEventListener(event,eventHandler,useCapture)
このうち、eventHandlerは、関数パラメータとして、要素がイベントを傍受して呼び出します.このような状況はJavaScriptの中でよく見られます.例えばajax、プロミスなどです.関数を返します.
たとえば、閉じます
function getName(){
var name="jack";
return function(){
return name;
}
}
var getNameFun=getName();
var name=getNameFun();
console.log(name);//'jack'
正常な場合は関数の外部は関数内部変数にアクセスできませんが、参照関数の内部変数の関数を返すことで実現できます.関数を変数として使う
var getTime=function(){
console.log(new Date().getTime());
}
setInterval(getTime,1000);
関数を変数として変数getTimeに与え、パラメータとしてsetTimeIntervalに渡す.関数は一等公民として関数式プログラミングの基礎です.高次関数は関数をパラメータの関数として用い,Reactにおける高次構成要素も高次関数として理解できる.