this真题编译

Posted 丹妮娃儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了this真题编译相关的知识,希望对你有一定的参考价值。

1 x y z分别输出的是什么?

var x=1,

   y=z=0;

  function add(n){

    return n= n+1;

  };

 y=add(x);

 function add(n){

    return n=n+3

 };

 z=add(x);

 x=?y=?z=?

考察点:预编译,有两个函数声明,函数的声明会被提升,所以第二个会把第一个覆盖,故x=1 y=4 z=4

2 下列函数分别输出的是什么?

function foo(x){

  console.log(arguments); // 打印实参

  return x;

}

foo(1,2,3,4,5);

(function foo(x){

  console.log(arguments);

  return x;

})(1,2,3,4,5);

function foo(){

  bar.apply(null,arguments);//bar(arguments)

};

function bar(){

  console.log(arguments);

};

foo(1,2,3,4,5);

3 下面函数会弹出什么?

function b(x,y,a){

  arguments[2] = 10;

  alert(a)

};

b(1,2,3);

function b(x,y,a){

   a = 10;

  alert(arguments[2])

};

b(1,2,3);

两个打印的都是10,因为只要存在,形参和实参列表是相互映射一一对应的,形参改变,实参也会随之改变

4 判断下面的类型

var f=(

  function f(){

    return "1";

  },

  function g(){

    return 2;

  }

)();

typeof f ?

首先我们要了解这个括号的意思 例如 var num=(1,2);这时候num就是2,如果var num = 1,2这样则会因为语法错误报错,所以这一题其实就是

function g(){

  return 2;

}();

立即执行函数,返回值是2,判断之后则是typeof 2 number

5 判断下面的输出值

var x=1;
if( function f(){} ){ //当判断玩之后能函数消失

  x+ = typeof f;这时候函数是undefined

}

console.log(x);

6.判断下面弹出的值

var name="222";

var a={

  name:"111",

  say:function(){

    console.log(this.name);

  }

}

var fun = a.say;

fun();

a.say();

var b={

  name:"333",

  say:function(fun){

    fun();

  }

};

b.say(a.say); //没人调用,里面指向的还是window

b.say = a.say;

b.say();

7 实现阶乘

方法1

function Fn(n){
  if(n <= 1){
  return 1;
}
  return n * Fn(n-1);
}
Fn(5);

方法2

var num=(function(n){
if(n<=1){
  return 1;
}
  return n*arguments.callee(n-1);//指向函数本身
}(5))

8.

var foo="123";

function print(){

  var foo="456";

  this.foo = "789";

  console.log(foo)

}

print();

var foo="123";

function print(){

  this.foo = "789";

  console.log(foo)

}

print();//789

var foo="123";

function print(){

  this.foo = "789";

  console.log(foo)

}

new print();

9.下面运行test()和new test()分别弹出什么?

var a=5;
function test(){
a=0;
alert(a);
alert(this.a)
var a;
alert(a)
}
test();
new test();

new一个对象的意思是啥?

function test(){

  var this = {

    __proto__:test.prototype;

  }//this上没有a 所以是undefined

  或者是

  var this = Object.creat(test.prototype)

}

10.

var bar={ a : 001};

function print(){  

  bar.a = ‘a‘;

  Object.prototype.b = ‘b‘‘

  return function inner(){

    console.log(bar.a);

    console.log(bar.b);

  }

 

}

print()();//第一个括号执行return 第二个括号执行return里面的函数

 

以上是关于this真题编译的主要内容,如果未能解决你的问题,请参考以下文章

为啥“delete *this”会编译?

编译错误:在此上下文中无法隐式捕获“this”

最强整理!1307页字节跳动Java面试全套真题解析火了,最强技术实现

Angular AOT 编译器 - 类型错误:this.compiler.analyzeModulesAsync 不是函数

C++:为啥会编译? (将 this-Reference 交给基类)

反编译中的 匿名内部类 this.val$的问题