中級JavaScriptの思考のインタビューの質問(C)

下部の分析を回答

1、Q:なぜなり、次のコードの出力は何ですか?

function fn() {
  console.log(foo);
  var foo = 2;
  console.log(foo);
  console.log(a);
}

fn();

2、Q:結果は、以下のいくつかの出力なぜ何ですか?

var name = 'first';
var a = {
  name: 'second',
  say: function () {
    console.log(this.name);
  }
}

var fun = a.say;
fun();//          1:
a.say();//        2:
var b = {
  name: 'third',
  say: function (fun) {
    fun();
  }
}
b.say(a.say);//   3:
b.say = a.say;
b.say();//        4:

3、Q:結果は、以下のいくつかの出力なぜ何ですか?

function Foo() {
  getName = function () {
    console.log(1);
  }
  return this;
}

Foo.getName = function () {
  console.log(2);
}
Foo.prototype.getName = function () {
  console.log(3);
}
var getName = function () {
  console.log(4);
}

function getName() {
  console.log(5);
}

Foo.getName();//          1:
getName();//              2:
Foo().getName();//        3:
getName();//              4:
new Foo.getName();//      5:
new Foo().getName();//    6:
new new Foo().getName();//7:

4、Q:なぜ、次のコードの結果出力は何ですか?

function fn() {
  console.log(typeof arguments);
}
fn();

5、Q:なぜ、次のコードの結果出力は何ですか?

var test = function a() {
  return 'a';
}
console.log(typeof a);

6、Q:なぜ、次のコードの結果出力は何ですか?

function fn() {
  var arr = [];
  for (var i = 0; i < 3; i++) {
    arr.push(function () {
      console.log(i);
    })
  }
  return arr;
}
fn()[0]();
fn()[1]();
fn()[2]();

7、Q:なぜ、次のコードの結果出力は何ですか?

var test = (function(x){
  delete x;
  return x;
})(0);
  
console.log(test);

8、Q:なぜ、次のコードの結果出力は何ですか?

var arr = ["a","v","b","c","d"];
delete arr[3];

console.log(arr.length);

9、Q:なぜ、次のコードの結果出力は何ですか?

var fl = 0.1 + 0.2 === 0.3;
console.log(fl);

  • 1、答えは次のとおりです。undefined 2 报错:a is not defined

    解像度:预编译变量 foo提升 foo没有赋值的情况下就是undefined , 赋值之后正常输出。然而 a 没有声明所以会报错

  • 2、答えは:first second first third

    解像度:这里考察this指向的问题, 1、fun()是一个函数this指向window , 2、a.say()正常调用输出 second。 3、b.say(a.say把函数当参数传进去直接调用值得注意的是这里调用是由 window 相当于立即执行函数。 4、b.say()是由 b来调用执行say()方法

  • 3、答えは次のとおりです。2 4 1 1 2 3 3

    解像度:1、Foo.getName(); Foo() 不实例化属性只有一个就是2 。 2、getName() 在预编译的时候函数提升程序执行var getName 重新赋值。3、 Foo().getName() 执行Foo() 里面getName 为全局函数调用 .4、getName() 上面调用 Foo().getName() 时 getName 为全局函数再次赋值。 5、new Foo.getName(); Foo() 依然没有实例化, 不带括号点的优先级高于new 所以实例化运行后的结果没有意义; 6、new Foo().getName() ; 实例化后的Foo()具备了原型属性getName()。 7、new new Foo().getName() 第一次实例化执行getName后得到的是一个值。这里和第5相似二次实例化的对象是一个值没有意义

  • 4、答えは次のとおりです。object

    解像度:arguments是类数组。用对象模拟的数组

  • 5.回答:undefined

    解像度:var test 字面量存储的是函数表达式, 函数表达式对于外界是忽略函数名称的,内部可以使用 。

  • 6.回答:3 3 3

    解像度:闭包考点, arr 中保存的三个函数并没有立即执行,所以 i 的值并没有保存当前循环的值。在调用的时候循环已经结束。最后只能输出 3

    Q:どのように012の値を保持する必要がありますか?

    function fn() {
      var arr = [];
      for (var i = 0; i < 3; i++) {
        arr.push((function (j) {
           return function () {
             console.log(j);
           }
          })(i))
      }
      return arr;
    }
    
    fn()[0]();
    fn()[1]();
    fn()[2]();
    
  • 7.回答:0

    解像度:delete 操作符是将object的属性删去的操作。但是这里的 x 是并不是对象的属性, delete 操作符并不能作用。

  • 8、答えは次のとおりです。5

    解像度:因为delete操作符并不是影响数组的长度。

  • 9、答えは次のとおりです。false

    解像度:这是由浮点数内部表示导致的。0.1 + 0.2 并不刚好等于 0.3,实际结果是 0.30000000000000004。解决这个问题的一个办法是在对小数进行算术运算时对结果进行舍入。

公開された156元の記事 ウォンの賞賛531 ビュー110 000 +

おすすめ

転載: blog.csdn.net/qq_39043923/article/details/104492364