JavaScriptは、現在最も人気のあるクロスプラットフォーム言語の1つである必要があります。私はフロントエンドでいくつかの興味深いことで遊んでいますが、この言語をうまく習得していないことがわかりました。私は少し不注意だったので、欠けているものを追加する時間がある時間を利用したかったのです。
この隠しバインディング
最初はこれは私が混乱していたものでしたが、私が最初にそれを見たとき、私は理解していませんでした。次に、同様の状況では、同じ問題を同様の方法で解決できます。そこで、簡単に検索するために知識を整理しようとしました。
これはJavaScript言語設計エラーですが、このエラーは避けられないようです。関数はオブジェクトであり、配列はオブジェクトなどです。
コードコピーは次のとおりです。
関数add(a、b){return a+b}
var sum = add(3,4);
console.log(sum); // sum = 7
この時点で、合計の結果は7です。
コードコピーは次のとおりです。
> typeof add
>「番号」
ここで見ることができるように、追加のタイプは数値です。
このモードで関数を呼び出すと、これはグローバル変数にバインドされます。
つまり、現在の環境では、このようにこれを呼び出すことができます
コードコピーは次のとおりです。
this.add(3,4)
これはこれの暗黙的な結合であり、これはさまざまな方法でバインドされます。
コードコピーは次のとおりです。
var hello = function(){
"Hello" + this.nameを返します。
};
name = 'this';
console.log(hello());
それから私たちは挨拶します、これ。そしていつ
コードコピーは次のとおりです。
var hello = function(){
"Hello" + this.nameを返します。
};
var user = {
こんにちは:こんにちは、
名前: 'Phodal'、
};
console.log(user.hello());
この時点で、ユーザーのHelloはHello機能を指しています。私たちの理解において、これはどのように可能ですか?だからそれはバグです。
この方法で変数を定義し、この値を割り当てると、内部関数はその変数を介してこれにアクセスできます。
var that =これ
したがって、状況がもう少し複雑な場合は、使用する必要があります。
コードコピーは次のとおりです。
vat that = this;
ヒント:
1.この変数の範囲は、常に最も近い囲みの関数によって決定されます。
2。ローカル変数(私、自己、それなど)を使用して、このバインディングを内部で利用できるようにします。
簡単な例:
コードコピーは次のとおりです。
var m = function(){
this.name = "m";
};
var mm = function(){
z = new M();
this.name = "mm";
z.printname = function(){
console.log(this.name);
};
return z.printname();
};
var mm = new mm;
この時点で、これはM機能を指します。これはMM自体です。これをMから削除すると、返された未定義です。したがって、私たちはそれや自己など、これの現在の範囲のエイリアスを作成します。
コードコピーは次のとおりです。
var mm = function(){
z = new M();
this.name = "mm";
var self = this;
z.printname = function(){
console.log(self.name);
};
return z.printname();
};
これにより、mmを返すことができます。さらに、コールバック関数のバインド法はES5で使用できます。
コードコピーは次のとおりです。
var mm = function(){
z = new M();
this.name = "mm";
z.printname = function(){
console.log(this.name);
} .bind(this);
return z.printname();
};
Bindはメソッドを受信機にバインドできます。
他の
別のこんにちは、世界
偶然に印刷( 'hello')( 'world')に遭遇し、「hello、world」を出力しました。
いわゆる高次関数は非常に便利であるようです。興味がある場合は、次の記事をご覧ください。