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 : arguments.callee //严格模式下会报错

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

方法3:for循环

function fn (num) {
if (num < 0) {
return -1;
} else if (num === 0 || num === 1) {
return 1;
} else {
for (var i = num - 1; i >= 1; i--) {
num *= i;
}
}
return num;
};
fn(6);

方法4:while循环
function fn (num) { 
var result = num;
if (num < 0) {
return -1;
} else if (num === 0 || num === 1) {
return 1;
} else {
while (num > 1) {
num--;
result *= num;
}
}
return result;
};
fn(6);

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里面的函数

 

posted @ 2018-03-09 16:24  徐念念  阅读(366)  评论(0编辑  收藏  举报