JavaScriptのインタビューコーディングの質問 - 4
6305 ワード
私が最初のブログで言ったように、これらは一般的に評価ベースのコードスニペットです.
これは矢印と通常の関数定義のスコープの違いについてです.
次のようにテストできます.
< div >
同じ問題を別の例で調べましょうbr/>
<> P >
<> P >
一方では
以下でテストすることができます
<> P >
< div class ="Lagagchen - nal "返信"
<高橋潤子>**この項目の翻訳は古いバージョンが元になっています**https://repl.it/@ hco/矢対規則的な機能?ライト= true "読み込み= "怠惰"
< div >
この質問はJavaScriptの約束に関する知識を評価することですbr/>
<> P >
<> 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 >
これは矢印と通常の関数定義のスコープの違いについてです.
// 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 >
あなたは以下のリンクからこのシリーズの前の記事を読むことができます
<> P >
< div class ="Lagagchen - chen link "
JavaScriptのインタビューのコーディングの質問- 1
ハリル缶オズセク・ Jan 4・ 2分読む
#javascript
#career
#webdev
#tutorial
< div >
< br/>
< div class ="Lagagchen - chen link "
JavaScriptのインタビューのコーディングの質問- 2
ハリル缶オズセク・ Jan 6・ 2分読む
#javascript
#webdev
#career
#tutorial
< div >
< br/>
< div class ="Lagagchen - chen link "
JavaScriptのインタビューコーディングの質問 - 3
ハリル缶オズセク・ Jan 7・ 3分読む
#javascript
#webdev
#career
#tutorial
< div >
Reference
この問題について(JavaScriptのインタビューコーディングの質問 - 4), 我々は、より多くの情報をここで見つけました https://dev.to/halilcanozcelik/javascript-interview-coding-questions-4-1fo7テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol