Web フロントエンドの場合、面接中に必ずいくつかの JS 面接の質問に遭遇するでしょう。今日は、最新の JS 面接の質問のいくつかをまとめます。それぞれの質問は印象的です。
事前分析: 現在の役割で。ドメイン、js を実行する前に、var および function キーワードは事前に宣言されますが、割り当てられません (個人的な意見)
事前解析に感銘を受けました。難しいからではなく、やらなければならないからです。注意してください、そして少し不注意です、答えは間違っています!分析前の質問は複数ありましたが、そのうちの 2 つを今でも覚えています。
2-1. 事前分析1
alert(a) a(); var a=3;function a(){ alert(10) } alert(a) a=6; a();
---------------区切り線---------------------
alert(a) a(); var a=3; var a=function(){ alert(10) } alert(a) a=6; a();
このコードにたどり着いたとき、間違った答えが得られました。その後、友人にアドバイスをもらい、自分でも理解してスッキリしました!
実際には、テストのポイントは 2 つあります。1 つ目は、変数を事前に宣言することです。2 つ目は、変数を宣言する前に関数を宣言することです。
最初の部分の結果を簡単に分析してみましょう:
1. 関数宣言は変数宣言よりも優先されるため、最初は a が function a(){alert(10)} であり、この関数が表示されます。
2.a()、関数が実行されると、alert(10)が表示されます
3. Var a=3が実行されるため、alert(a)は3を表示します
4. aは関数ではないため、実行を続行します。 a() の場合、エラーが報告されます。
操作結果の 2 番目の部分:
1.underfind
2. エラー報告
前述したように、事前解析は var キーワードと function キーワードを使用した事前宣言ですが、値の割り当てはありません。そのため、最初はアンダーファインドでしたが、その後、 a() が実行されたときに a が関数ではなかったため、エラーが報告されました。
関数式、変数宣言と等しい
var a=function(){ alert(10) }
function a(){ alert(10) }
var a=0;function aa(){ alert(a) a=3 }
---------------分割行1---------------------
var a=0;function aa(){ alert(a) var a=3 } aa();
------ - ----2行目の区切り------------------
var a=0;function aa(a){ alert(a) var a=3 } aa(5) alert(a)
優先度の方が高い変数 a の
---------------3 行目の分割----------
var a=0;function aa(a) {
alert (a)
a=3
}
aa(5)
alert(a)
//5,0 関数本体で、alert(a) と a=3 を実行します。変更されるのはグローバルではありません変数 a ですが、パラメータ a
---------------4行目----------
var a=0;function aa(a){ alert(a) var a=3 alert(a) } aa(5)
// インターネットでアドバイスを求めましたが、答えは 2 つあります (理解できる場合は、コメントでアドバイスをお願いします)
//1。優先順位は変数宣言よりも高いため、変数 a の宣言は実際には無視されます。これは
//var a=0;
//function aa(a){
// var a=5;
// と同等です。 alert(a)
//a=3
//alert(a)
//}
//aa(5)
//2。仮パラメータとローカル変数は同じ優先順位を持ち、これは
/ と同等です。 /var a=0;
//function aa(a){
// var a; まず
を宣言します // a=5 仮引数と変数名は同じなのでカバーします!
//alert(a)// a=3//alert(a)
//}
//aa(5)
---------------5行目を区切ります-- ----------------
var a=0;function aa(a){ alert(a) a=3 alert(a) } aa() alert(a) //underfind 3 0
3。ループと再帰
var arr=[];for(var i=0;i<10;i++ ){ i<=1?arr.push(1):arr.push(arr[i-1]+arr[i-2]); } console.log(arr)
これを行うには?そのときの私のアプローチは、最初に表を表示し、次に裏側を表示するという2つのステップで書かれていました。 これは多すぎるコードです。以下
1. 最初に num(2,5 ) を実行します。それは
//01234543210 //先展示前面的 01234 //n:开始的数字 m:结束的数字function num1(n,m){ for(var i=n;i<m;i++){ //再展示后面的 543210 console.log(i); if(i===m-1){ num2(n,m) } } }function num2(n,m){ for(var i=m;i>=n;i--){ console.log(i) } } num1(2,5) //2345432
function num(n,m){ console.log(n); if(n<m){ num(n+1,m); console.log(n); } } num(2,5) //2345432
console.log(2); -> num(3,5); -> console.log(2); //执行num(3,5); 就是是相当于 console.log(3); -> num(4,5); -> console.log(3); 下面以此类推 console.log(2); -> console.log(3); -> num(4,5); -> console.log(3); -> console.log(2);
です。これらの事例を読んだ後は、このメソッドを習得したと思います。 php 中国語 Web サイトの他の関連記事にも注目してください。
関連記事:
CSS3で飛ぶ蝶のアニメーションを作成する方法
キャンバスを使用してパーティクルを作成する方法噴水アニメーション効果
以上が最新のJS面接の質問の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。