JSを学ぶとき、あなたのアハモーメントは何でしたか?[閉まっている]


16

JavaScriptを学習していたときのことを覚えていますか?あなたが突然「それを手に入れた」瞬間は何でしたか?(たとえば、CSS aha-momentは、ボックスモデルについて学んだときでした...)

私が質問している理由は、JSを6週間学習しているからですが、それでもかなり混乱しています。SOで最近読んだものからの引用です。

「..関数は値と同様に機能します。メソッドは関数の値を持つオブジェクトのプロパティであるためです(オブジェクトでもあります)。」

最初も混乱していたのか、それがあなたにそれを理解させたのか興味があります。

(Sitepointsの「Simply JavaScript」、「Eloquent JavaScript」の本を読んでおり、LyndaのEssential JavaScriptチュートリアルを読んでいます。プログラミングの経験はなく、数学はひどいものでした;)

ありがとう!


1
引用が紛らわしくてわかりにくいのは正直であり、JavaScriptを何年も怒りで使ってきたので、言語に慣れていない人にとって混乱しているとしても驚きません:)
Russ Cam

引用と混乱は、関数がjavascriptのファーストクラスオブジェクトであると言っているためです。ドキドキし続けると、「a-ha」の瞬間のソースが提供されます:追加の参照フレーム。
チグジー

回答:


15

私にとって最大の「AHA」の瞬間は、次のことを完全に把握したときだったと思います。

変数値は、関数を含む何でもかまいません

var person = {
    name: 'Sean',
    getName: function() { return this.name; },
    numbers: [7, 11, 41]
}

var myvar = person.name;
alert(myvar); //prints name
alert(myvar()); //"myvar" is not a function error
alert(myvar.length); //undefined

myvar = person.getName;
alert(myvar); //prints the contents of the function as a string
alert(myvar()); //calls the function
alert(myvar.length); //undefined

myvar = person.numbers;
alert(myvar); //prints contents of array
alert(myvar()); //"myvar" is not a function error
alert(myvar.length); //prints 3


10

他の回答のいくつかが触れたことに同意します。私にとってA-haの瞬間は、閉鎖とは何かを理解したときでした

閉鎖とは何ですか?という質問に対する回答を投稿しました これを説明するために。

クロージャを理解していない場合、Javascriptは[]配列やJSON{}オブジェクト)、ブラウザのコンテキストではDOM(window/ document)などの簡潔な構文機能を備えた非常に限られた言語です。

ただし、クロージャを理解すると、多くの理解が得られます。

  • プロトタイプとは何ですか(ここを参照
  • プロトタイプがJavascriptのOOP鍵である理由(こちらを参照
  • Javascriptのほとんどのイベントハンドラ実際にどのように機能するか(クロージャを理解しないと魔法のように見えることがあります)
  • コールバックで多くのコード(および/または時間)を節約する方法

資源


4

Javascriptで私にとって最も重要な言語「Aha」は

  • オブジェクトとして機能
  • 閉鎖
  • プロトタイプベースのオブジェクト指向
  • JavaScriptのスコープ

これらのすべてのトピックについては、Webで多くのリソースを見つける必要があります。

(そして、すべてが完全に論理的になるとは思わないでください:JavaScript 紛らわしいです)


本当に?JavaScriptがされて混乱しますか?私にはそれはすべて自然に思えます。しかし、それは私だけです:-P。
Htbaa

3

数年前に最初に学習を始めたとき、javascriptは私にとっては困難でした。なぜなら、私はサーバーサイドの事柄(phpとperl)からWeb開発の学習を始めたからです。

構文やOOP、あるいはJavaScriptのライブドリブンドリブンネスのようなものではありませんでした。そしてこれとこれから、ユーザーがページを離れるまで、何かが起こるのを待って応答するという絶え間ない状態にあります。」それは本当にループに私を投げました。

特定の瞬間に名前を付けなければならなかった場合、検索提案スクリプトのためにAJAXを学習していたときに言うでしょう。しかし、IMOはただarbitrary意的です)しかし、最終的に違いを把握したとき、そこからすべてがはるかに簡単になりました:)


ここでは本当に良い方向性がいくつかあります。皆さんありがとう!

1

私はついに、言語のどの部分も、私が望むくだらないものに再定義できるという考えを理解しました。この点で、Cよりもさらに強力です。たとえば、標準toString()関数が気に入らない場合は、独自の関数を実装します。

x.toString = function () {
    return "this is MY toString function biatch!";
}

これはオーバーライドとどう違うのですか?
ニコール

1

関数オブジェクトにプロパティを設定できることに気づいたとき。

プロトタイプが何であるかをようやく理解したときも。

function Alpha(){
    return 'aplha';
}
Alpha.Beta = function(){
    return 'beta';
}
Alpha.prototype.Delta = function(){
    return 'delta';
}

Alpha(); // 'alpha'
Alpha.Beta(); // 'beta'
new Alpha().Delta(); // 'delta'

0
function Obj() {
    this.x = 42;
    this.value = function() {
        return this.x;
    };
}

var o = new Obj();
o.value();        // 42
var f = o.value;
f();              // undefined??

そして、最終的にこれらの結果を把握するa-haの瞬間。


0

Ahaモーメント#1:私にとって、言語であるJavaScriptは、その主要な用途である動的HTMLおよびクライアント側Webプログラミングとは異なることを認識しています。DOMとブラウザーの非互換性に本当にイライラしたとき、私はJavaScriptにイライラするでしょう。

Aha moment#2:継承は多くの方法で実行できることを理解する。典型的なクラスベースの継承は1つです。他にも、プロトタイプベース(JavaScriptで使用されるスタイル)があります。

#1に関しては、JavaScript:The Good Partsを推奨することに抵抗することはできません。JavaScriptを独自の優れた言語として扱います。


0

ブロックの範囲指定と巻き上げはありません。

foo(); // function executes, no error

if (...) {
  function foo(){
    ...
  }
}


-1

jQueryは基本的に私にとって「a-ha」の瞬間でした。C#でのLINQ / lambda構文の経験が豊富なため、構文は馴染みがありました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.