[Avascript]Cと比較学習するJavascript(1)
9791 ワード
本日の学習資料:JAvascript 5-javascriptの基本構文
C言語を中心にアルゴリズムを解いてから初めてJavascriptに触れると「不思議」と感じます.初めて物事や現象を見たとき、不思議に思うために、同じカテゴリの類似のものを経験した後、同じカテゴリで別のカテゴリを経験したとき、両者の違いを感じて不思議に思います.
C言語と似ていて、嬉しい文法もありますが、Javascriptの個性を感じているところでも、同じように「不思議」な感じがします.
Javascriptを勉強しているうちに、「不思議」を感じながら勉強すると、もっと感銘を受けます.まだ高-五級用語に慣れていないので、コリンの立場に立って粗浅な比較をしたいと思います.やはり達人達の非難を期待します
(この記事では、バニラコード学習ガイドによって推奨されるPoiemawebのJS構文の内容を学習し、作成します.👀)
1.Javascriptの変数は、割当値によって動的に決定されます.
JSの変数はC言語と異なり,変数を宣言する際に予めデータ型を設定するのではなく,変数に割り当てられた値によって変数の型が動的に決定される.Cの場合、int、char、string、doubleの形式でデータ型と変数に割り当てられるメモリサイズを設定できますが、JSは指定した値のタイプで変数のタイプを決定します.
したがって、Cは任意のタイプの演算子を使用する必要はありません.
var type = typeof 'Hi!' // string
string str = 'Hi!'
最初から『もち』と書いてありましたまた、Cは変数のタイプを静的に固定するため、鋳造が行われることが多い.char ch = 'a'
int num = (int)('a');
Javascriptは、動的にタイプを決定するように、割り当てられた値に基づいてメモリを動的に割り当てます.これらの特性では,JSはより柔軟な暗黙的変換を用いる.
var foo = 1 + '10'; // '110'
var bar = 1 * '10'; // 10
JSでは、これらの演算を強制的なタイプの暗黙的な変換で実行できるため、「不思議」と感じるかもしれません.2.JavascriptオブジェクトがCに似ている構造体
var person = {
name: 'Lee',
gender: 'male',
sayHello: function() {
console.log('Hi! my name is' + this.name);
}
}
console.log(typeof person); // object
console.log(person.name); // 'Lee'
console.log(person.sayHello()) // Hi! My name is Lee
もちろんC++のclassの方が似ていますが、筆者は構造体に詳しいので、構造体として比較します.上のコードはJS標準コードです#include <iostream>
#include <string>
using namespace std;
struct person {
string name = "Lee";
string gender = "male";
};
void sayHello(person name) {
cout << "Hi! My name is" << " " << name.name;
}
int main() {
person Suh;
cout << Suh.name << '\n';
cout << Suh.gender << '\n';
sayHello(Suh);
return 0;
}
これはJSにおけるオブジェクト概念とよく似ている.Cのプロセス指向性における構造体の発展に伴い,オブジェクト指向言語C++とJSにおけるobjectとclassの概念が確立されているようである.
(ソース:リンクからアクセスすると、より深いC++とJSの比較が表示されます.https://doitnow-man.tistory.com/129)
3.有効範囲の違い:Block-level scopeとFunction-level scope
C言語では、変数宣言は通常block-level scopeに位置合わせされ、簡単に言えば、コードブロックが括弧"{}"に積み上げられていることを意味する.例えば、ifのブロック、forのブロック関数のブロック、これらはすべて共通です.
#include <iostream>
using namespace std;
//1. 모두를 아우르는 전역변수
int num = 1;
void run() {
int num = 8;
}
int main() {
//2. For문의 세계에서의 num
for (int i = 0; i < 10; i++) {
int num = 3;
}
//3. run함수의 세계에서의 num
run();
return 0;
}
C言語では、各世界の変数はブロック単位(すなわち、各世界の変数)で厳密に分離される.numという変数は世界ごとに異なる顔をしている.ただし、JSのFunction-level scopeでは、関数でvarとして定義された変数が実行されると、文以外でもその操作が実行されます.すなわち、関数では、追加の宣言を必要とせずにfor文のほかに変数を使用することもできます.
function main() {
for (int i = 0; i<3; i++) {
var temp = 'hi';
/*do something*/
}
console.log(temp);
}
上のソースコードは「Ozzigorigo AlphagoポケモンGo」の説明リンクを参照しています.オジゴ、アルファゴ、ポケモンゴの補足説明を見てみると、もっと理解できます.(ニックネームのような説明ありがとうございます🙏)
最も驚くべきことに、グローバル変数さえ上書きされます.
function main() {
var name = "yudoomack";
var names = ['kim', 'lee', 'park'];
for (var i = 0; i<names.length; i++) {
var name = names[i];
if (name === 'kim') {/*do something*/}
}
console.log(name);
}
Cのheavy userたちは慣れていないかもしれませんが、nameにはyudomack、kim出力が覆われています.「Ogego」のブログを見ると、この場合、コラボレーション時や外部jslibraryに読み込んで使用すると、グローバル変数が影響を受け、致命的になる可能性があります.🌲Javascriptドリームツリー🌲 これらの現象については、「存在」と「露出」をさらに学び、防止方法を理解します.
Reference
この問題について([Avascript]Cと比較学習するJavascript(1)), 我々は、より多くの情報をここで見つけました https://velog.io/@hw8129/Javascript-C와-비교하며-학습하는-Javascript-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol