JavaScriptのインタビューコーディングの質問 - 4


私が最初のブログで言ったように、これらは一般的に評価ベースのコードスニペットです.

  • これは矢印と通常の関数定義のスコープの違いについてです.
    // 1. What will be logged? Why?
    const module1 = {
      x: 55,
      getX: function () {
        console.log('x:', this.x);
      }
    };
    
    const module2 = {
      x: 55,
      getX: () => {
        console.log('x:', this.x);
      }
    };
    
    (function() {
      this.x = 66;
      module1.getX();
      module2.getX();
    })();
    
    コンソール出力は次のようになります.
    x: 55
    x: 66
    
    だってthis 通常の関数でラッパーオブジェクトを参照しますthis.x ログx ラッパーのプロパティmodule1 最初の例のオブジェクト.反対側では、矢印関数は自分のスコープをバインドしませんが、親プロセスから継承しますWindow またはglobal この場合、オブジェクト.
    次のようにテストできます.
    < div >

  • 同じ問題を別の例で調べましょうbr/>
    <> P >
    // 2. What will be logged? Why?
    const message1 = {
      hello : 'Hello',
      names : ['Sue', 'Joe'],
      showMessage: function () {
        this.names.forEach(function(name) {
          console.log(`${this.hello} ${name}`);
        });
      }
    }
    message1.showMessage();
    
    const message2 = {
      hello : 'Hello',
      names : ['Sue', 'Joe'],
      showMessage: function () {
        this.names.forEach(name => {
          console.log(`${this.hello} ${name}`);
        });
      }
    }
    message2.showMessage();
    
    コンソール出力は次のようになります.< br/>
    <> P >
    undefined Sue
    undefined Joe
    Hello Sue
    Hello Joe
    
    < p >message1 , 内部の機能this.names.forEach は通常の関数として定義されるので、this デフォルトでグローバルオブジェクトに等しいWindow ブラウザでglobal ノードで.そして、それはありませんhello プロパティ.this に等しいundefined デフォルトではp >
    一方ではmessage2 , 内部の機能this.names.forEach は矢印関数として定義されます.矢印関数は自身のスコープを持っていないので、所有者のshowMessage スコープ.範囲showMessage はラッパーオブジェクトですかmessage2 . このため、我々は到達することができますhello 資産message2 使用によってthis.hello .


    以下でテストすることができます
    <> P >
    < div class ="Lagagchen - nal "返信"
    <高橋潤子>**この項目の翻訳は古いバージョンが元になっています**https://repl.it/@ hco/矢対規則的な機能?ライト= true "読み込み= "怠惰"
    < div >

  • この質問はJavaScriptの約束に関する知識を評価することですbr/>
    <> P >
    const promiser = ms => new Promise((resolve, reject) => {
      setTimeout(() => { resolve('wait wait..') }, ms)
    });
    
    const timeout = new Promise((resolve, reject) => {
      setTimeout(() => { resolve('timeout!') }, 2000)
    });
    
    const race1 = Promise.race([promiser(1000), timeout]);
    const race2 = Promise.race([promiser(3000), timeout]);
    
    // What will be the output?
    race1.then(res => console.log('race1:', res))
      .catch(err => console.log('race1:',  err));
    
    // What will be the output?
    race2.then(res => console.log('race2:', res))
      .catch(err => console.log('race2:', err));
    
    結果は以下である: < br/>
    <> P >
    race1: wait wait..
    race2: timeout!
    
    < P >Promise.race() 勝つか、より早く拒絶する勝者約束を返します.我々timeout 約束は2秒で解決されます.The promiser 解決時間をパラメータとします.最初のレースでは、1秒で解決するので、レースに勝つが、2番目のレースでは、それはパラメータとして3秒かかるtimeout が解決される.p >
    以下でテストすることができます
    <> P >
    < div class ="Lagagchen - nal "返信"
    <高橋潤子>**この項目の翻訳は古いバージョンが元になっています**https://repl.it/約束のレース?ライト= true "読み込み= "怠惰"
    < div >
  • < OL >
    あなたは以下のリンクからこのシリーズの前の記事を読むことができます
    <> P >
    < div class ="Lagagchen - chen link "


    < div >
    < br/>
    < div class ="Lagagchen - chen link "


    < div >
    < br/>
    < div class ="Lagagchen - chen link "


    < div >