0
最近、私はJohn Resigの「The Secrets of JavaScript Ninja」を読んでいて、リスト4.10に到達しました。つまり、ボタンがクリックされたときにコードが印刷される、特定のコンテキストを関数にバインドします。 通常の関数式の代わりに矢印関数を使用した場合にのみ、コードが正常に実行されることを示しています。関数式でコードが正常に動作しないのはなぜですか?どのようにこののキーワードが機能しますか?ここでこのキーワードは、関数式と矢印関数でどのように機能しますか?
は、関数式とコードです:
function Button() {
this.clicked = false;
this.click = function() {
this.clicked = true;
if (button.clicked) {
"The button has been clicked"
};
};
}
var button = new Button();
var elem = document.getElementById("test");
elem.addEventListener("click", button.click);
<button id="test">Click Me!</button>
、ここでは、(完璧に動作)矢印機能付きコードです:
function Button() {
this.clicked = false;
this.click =() => {
this.clicked = true;
if (button.clicked) {
console.log("The button has been clicked");
}
};
}
var button = new Button();
var elem = document.getElementById("test");
elem.addEventListener("click", button.click);
<button id="test">Click Me!</button>
矢印式を使用すると、 'this'は現在のスコープを維持しますが、正規関数式' this'はスコープを変更して関数内のスコープを参照します。 –
[このキーワードはどのように機能しますか?](https://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work) – abhishekkannojia
https://developer.mozilla.org/ja-jp/docs/Web/JavaScript /リファレンス/関数/ Arrow_functions –