ホームページ  >  記事  >  ウェブフロントエンド  >  JSと関数型言語の3つの特徴_基礎知識

JSと関数型言語の3つの特徴_基礎知識

WBOY
WBOYオリジナル
2016-05-16 16:56:551068ブラウズ

まず第一に、概念があります。この言語は関数をサポートする言語ではありません。これを「関数型言語」と呼びます。関数型言語の関数には、呼び出されるだけでなく、他のプロパティもあります。ポイントは以下の3つです:
1. 関数はオペランドです
2. 関数内の操作は関数の外に副作用を持ちません

1.
通常の関数が呼び出される場合、関数は演算子であり、渡されるパラメータはオペランドであると抽象的に理解できます。
ただし、JavaScript の関数が別の関数のパラメータとして使用される場合。関数では、参照によって渡され、この「受信パラメータ」はオペランドとして理解できます。結論としては、関数 (「入力パラメーター」として) にはオペランドの意味があり、「関数パラメーター」は通常のパラメーターと何ら変わりません。

2. 関数内のデータの保存
命令型言語では、関数内のプライベート変数(ローカル変数)を保存することはできません。プログラム実行の観点から見ると、ローカル変数はスタック上に確保され、関数の実行終了後に占有されていたスタックは解放されます。したがって、関数内のデータは保存できません。
JavaScript 関数では、関数内のプライベート変数を変更でき、再度関数に「入る」と、変更された状態が継続されます。次の例は、この機能を示しています。

コードをコピー コードは次のとおりです。
var set ,get ;
関数 MyFunc(){
var value = 100;
関数 set_value(v){

値 = v;
}
関数 get_value(){
戻り値;
}

set = set_value;

get = get_value;
}
MyFunc();
console.log(get()); //100
set(300);
console.log(get()); //300

明らかな利点は、データを関数内に保持できる場合、その関数をインスタンスに割り当てるときに (コンストラクターとして) 使用できることです。これらのデータは複数のインスタンス間で操作を実行します。データは異なるクロージャに存在するため、相互に影響しません。
オブジェクト指向の用語で説明すると、さまざまなインスタンスが独自のプライベート データ (特定のパブリック データからコピーしたもの) を持つことを意味します。次の例は、この機能を示しています。

コードをコピー コードは次のとおりです。
function MyObject () {
var value = 100;
this.setValue = function(){
value = v;
}
this.showValue = function(){
console.log (値 );
}
}
var obj1 = new MyObject();
var obj2 = new MyObject();
obj2.setValue(300);

obj1.showValue(); //100;


3. 関数内の操作には関数の外には副作用はありません
これ この機能の意味は次のとおりです:
* 関数はエントリ パラメーターを使用して、変更せずに操作を実行します (変数パラメーターの代わりに値パラメーターとして使用されます)
* 関数の外部にある他のデータの値は、操作中には変更できません (例: グローバル変数)
* 操作の完了後、値は「関数 return」を通じて外部システムに転送されます
このような関数は、動作中に外部システムに副作用を与えません。ただし、JavaScript では関数内でグローバル変数を参照および変更でき、さらにグローバル変数を宣言することもできることに気付きました。これは実際にその機能特性を破壊します。

さらに、JavaScript では、関数内でオブジェクトと配列のメンバーを変更することもできます。これらのメンバーは、オブジェクト システムの外部の他の関数ではなく、オブジェクト メソッドによって変更する必要があります。
つまり: JavaScript のこの機能は、開発者のプログラミング習慣によってのみ保証されます。

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