フロントエンドの面接の質問(jsパート)

1. undefinedとnullの違いは何ですか?

undefinedは、定義が割り当てられていないことを意味します

a; aが割り当てられていない場合、現時点ではaのタイプは無定義です

nullが定義および割り当てられていますが、値はnullです

b = nullとします;この時点でaのタイプはnullです

2.いつ変数にnullを割り当てますか?

オブジェクトが割り当てられることを示す初期割り当て

a = nullとします。
a = {名前:「ジャック」};

終了する前に、オブジェクトをガベージにします(ガベージコレクターによって収集されます)

a = nullとします
a = {name:“ zs”};
a = null

3.変数タイプとデータタイプを厳密に区別しますか?

データの種類:

1.基本タイプ
2.オブジェクトタイプ

可変型

1.基本タイプ:saveはデータの基本タイプです
。2。参照タイプ:アドレス値を保存します(例:ox123)

例:

a = "abc"、
"abc"はデータ型の基本
変数aは変数型の基本型、保存はデータの基本型( "abc")とします。

同じ

let b = [1,2];
[1,2]はデータ型のオブジェクトです。
変数bは変数型の参照型であり、アドレス値を保存します。
写真が示すように

4.プロトタイプ

質問1:

function A (){
    
    
}
A.prototype.n = 1
var b = new A()
A.prototype = {
    
    
n:2,
m:3
}
var c = new A()
console.log(b.n,b.m,c.b,c.m)
// 1,undefined,2,3

質問2:

function F(){
    
    }
Object.prototype.a = function(){
    
    
console.log('a()')
}
Function.prototype.b = function(){
    
    
console.log('b()')
}
var f = new F()
f.a()
f.b()
F.a()
F.b()
//a()
//报错
//a()
//b()

ここに画像の説明を挿入

5.変数宣言の昇格と関数宣言の昇格

質問1:

 var a =  4;
       function fn(){
    
    
           console.log(a);
           var a = 5;
       }
       fn();

の最終的な値は何ですか?//未定義の変数宣言の昇格

変数宣言の推進

  1. varによって定義(宣言)された変数は、ステートメントが定義される前にアクセスできます。
  2. 値:アンダーファイン
    ここに画像の説明を挿入

質問2:

	fn();
       function fn(){
    
    
           console.log(123);
       }

ここに画像の説明を挿入
関数は、定義される前にアクセスできます

関数宣言の推進

  1. 宣言された関数の関数では、前に直接呼び出すことができます
  2. 値:関数定義オブジェクト
    ここに画像の説明を挿入

注意:

 fn();
       var fn = function (){
    
    
           console.log(123);
       }

これは変数宣言の促進であり、var宣言は変数宣言の促進です。

6.実行コンテキストスタック

質問1:

 console.log('global bengin:'+i);
   var i = 1;
   foo(1);
   function foo(i){
    
    
       if(i==4) return;
       console.log('foo() begin:'+i);
       foo(i+1);
       console.log('foo() end:'+i);
   }
   console.log('global end:'+i);
  1. 順番に何が出力されますか?
    ここに画像の説明を挿入

  2. プロセス全体でいくつの実行コンテキストが生成されますか?
    5 = foo(1)+ f00(2)+ foo(3)+ foo(4)+ window

質問2:

 function a(){
    
    }
   var a;
   console.log(typeof a);

結果:

ここに画像の説明を挿入

分析:

ここに画像の説明を挿入
関数の昇格は変数の昇格よりも優先度が高いため、後で実行されます。変数の昇格が最初に実行され、次に関数の昇格が実行され、変数の宣言によって上書きされることはありません。aは可変プロモーションではなく機能プロモーションです

質問3:

if(!(b in window)){
    
    
       var b =1
   }
   console.log(b);
   

結果:

質問4:

 var c =1
   function c(c){
    
    
       console.log(c);
   }
   c(2) // 报错

結果:

ここに画像の説明を挿入

分析:

c(2)cは変数であり、関数ではありません。関数の昇格は変数の昇格よりも優先されます。代表の後に実行されます。最初に変数の昇格が実行され、次に関数の昇格が実行されます。変数の割り当て後に上書きされます。つまり、aは変数の昇格であり、cは変数であり、呼び出すことができないため、エラーが報告されます。
ここに画像の説明を挿入

7.ジョブドメインチェーン

質問1:

 var x = 10;
      function fn(){
    
    
          console.log(x);
          
      }
      function show(f){
    
    
          var x =20;
          f();
      }
      show(fn);

結果:

ここに画像の説明を挿入

分析:

ここに画像の説明を挿入
fn関数のスコープにx変数はありません。変数がない場合は、ルックアップ(グローバルスコープを探します)すると、
出力xは10になります。

質問2:

在这里插入代码片  var fn = function(){
    
    
          console.log(fn);
      }
      fn()
      var obj = {
    
    
          fn2: function(){
    
    
              console.log(fn2);
              
          }
        }
        obj.fn2()

結果:

ここに画像の説明を挿入

分析:

fnは、グローバルウィンドウの下にあるメソッドであり、次のように見つけることができます。
ここに画像の説明を挿入

ただし、fn2はobj範囲のメソッドであり、this.fn2からアクセスできます。

  var fn = function(){
    
    
          console.log(fn);
      }
      fn()
      var obj = {
    
    
          fn2: function(){
    
    
              console.log(this.fn2);
              
          }
        }
        obj.fn2()

ここに画像の説明を挿入

8.閉鎖

質問1:

 function  fn(a=0){
    
    
        var num =223
        var fn1 = function(b=1){
    
    
            num+=b
            console.log(num);          
        }
        num+=a;
        return fn1
    }
    var fn2 = fn()
    fn(2)()
    fn(3)()
    fn()(2)

結果:

ここに画像の説明を挿入

分析:

fn()が呼び出されるたびに、新しいクロージャが生成され、仮パラメータの値は異なります

質問2:

 function fn(n,o){
    
    
       console.log(o);
       return {
    
    
           fn:function(m) {
    
    
               return fn(m,n)
           }
       }
   }
   var a = fn(0); a.fn(1),a.fn(2),a.fn(3)
   var b = fn(0).fn(1).fn(2).fn(3);
   var c = fn(0).fn(1); c.fn(2);c.fn(3)

結果:

ここに画像の説明を挿入

質問3:

var name = "text window";
   var obj = {
    
    
       name: "my object",
       getNameFunc: function(){
    
    
           return function(){
    
    
               return this.name;
           }
       }
   }
   console.log(obj.getNameFunc()());

   var name2 = "text window";
   var obj = {
    
    
       name2: "my object",
       getNameFunc: function(){
    
    
           var that = this
           return function(){
    
    
               return that.name2;
           }
       }
   }
   console.log(obj.getNameFunc()());

結果:

ここに画像の説明を挿入

エラーが発生した場合はお知らせください。

おすすめ

転載: blog.csdn.net/yrfjygb/article/details/113745643