jsの中で穴が空きやすいいくつかの面接試験問題


今日はいくつかの面接問題を見ました.ちょっと間違えやすいです.うん、整理して、みんなで見ました.
1、問題を見る:
    (function(){
        var a = b = 3;
    })();

    console.log("a defined? " + (typeof a !== 'undefined'));//a defined? false
    console.log("b defined? " + (typeof b !== 'undefined'));//b defined? true
説明:
ステートメントvar a=b=3です.に相当する
b = 3;
var a = b;
そしてvar a=bbは最終的に大域変数となり(varキーの後ろにはないので)、閉鎖関数の外にあっても機能領域内にある.注意してください.厳格なモードでは、ステートメントvar a=b=3を使用します.ReferenceErrerの実行時のエラーが発生します.bは定義されていません.これにより、任意のヘッドheadfakes/bugsを回避します.(これはなぜあなたがコードの中でstrickを使うべきですか?重要な例です!)
2、下の問題を見て、まず答えを見ないで、プリントの結果は何ですか?
    var d ={};
    var arr = ["leo","donna"];
        arr.forEach(function(k) {
        d[k] = undefined;
    });
    console.log(d);
    console.log(arr);
えっと、まず考えてみます.
ok、答えを発表します.
    console.log(d);//{leo: undefined, donna: undefined}
    console.log(arr);//["leo", "donna"]
説明を見ると次のとおりです
上に表示されたコードセグメントは、オブジェクトdに2つの属性を設定します.理想的には、未設定のキーを持つJavaScriptオブジェクトに対して実行されるルックアップ評価は未定義です.ただし、このコードを実行すると、これらの属性は対象の「自分の属性」としてマークされます.
これは、オブジェクトが所与の属性のセットを持つことを保証するための有用な戦略である.オブジェクトをObject.keysに渡すと、これらの設定キーを含む配列が返されます.
3、もう一つ目の問題を見てください.
function foo1()
{
  return {
      bar: "hello"
  };
}
 
function foo2()
{
  return
  {
      bar: "hello"
  };
}
console.log(foo1());
console.log(foo2());
友情のヒントは、答えを出す前に必ず問題を見てください.
うん、答えを出す
    console.log(foo1());//{bar: "hello"}
    console.log(foo2());//undefined
思いませんでしたか?正直に言うと、この答えを見た時、私は考えていました.なぜですか?同じです.どうして結果が違っていますか?
まず説明を見ます.
foo 2()でreturn文を含む行(他の内容はありません)に遭遇した場合、return文の直後に自動的にセミコロンを挿入します.
したがって、2番目の関数は以下に相当します.
function foo2()
{
  return ;
  {
      bar: "hello"
  };
}
このように見ますと、確実にundefinedに戻りますので、自分でコードを書く時も注意してください.
4、穴が落ちやすい問題をもう一つ見てください.
var length = 10;
function fn() {
    console.log(this.length);
}

var obj = {
  length: 5,
  method: function(fn) {
    fn();
    arguments[0]();
  }
};

obj.method(fn, 1);
当ててみて、結果は何ですか?10,5?…………noのno
正解は:10   2
顔がぼんやりしていますか?はは、説明を見てみます.
10に戻るならいいですが、できないなら基礎をよく見てください.なぜ結果は2ですか?
私たちはargments[]配列を用いてJavaScript関数の任意の数のパラメータにアクセスできることを知っています.ですから、argments[0]はfn()を呼び出すだけです.fnでは、この関数の作用領域はパラメータ配列となり、記録パラメータ[]の長さは2に戻ります.
何か分からないことがあったら、あるいはもっと知りたいです.見てください.http://web.jobbole.com/94523/