js面试题(5)

1.下面代码输出什么?

var a = {n:2}
var b = a;
a.n = a = {m:1};
console.log(a,b);	//a:{m:1} b:{n:{m:1}}

2.下面代码输出什么?

var x = 1;
if(function fn(){}){
  x += typeof fn
}
console.log(x)	//1undefined
//考点:括号内函数声明外部访问不到

3.下面代码输出什么?

var fn = function test(){
   console.log('代码执行了')
}
test() //ReferenceError: test is not defined

4.下面代码输出什么?

typeof undefined === typeof Undefined  //true
//typeof检测到没有定义的Undefined变量 默认返回undefined

5.下面代码输出什么?

var str = typeof typeof {name:'heaven'};
if(str.length == 6){
   str.prop = '这是一波字符串';
   //实际执行 new String(str).prop = '这是一波字符串'; 执行后对象又被销毁所以str对象内还是不存在prop属性
}
console.log(str.prop);  //undefined
//str = 'string' 字符串
//考点:包装类的特点即时销毁

6.下面代码输出什么?

var x = 10;
function a(){
  y = function(){
  	x = 2;
  }
  console.log(this);
  return function(){
     var x = 3;   //x是次函数this的x属性,而this已经指向window
     console.log(this.x);  //10
     y();
     console.log(this.x);  //2
  }.apply(this)   //this指向window
}
a();                //10 2
console.log(y)      //ƒ (){x = 2}

7.下面代码输出什么?

if(!('a' in window)){
   var a = 1;
}
alert(a); //ReferenceError: a is not defined

8.下面代码输出什么?

var n = 10;
var obj ={
   n : 5,
   c : a()
};
function a(){
   var n = 7;
   var c = function(){
     var n = 3;
     console.log(n);          //3
     console.log(this.n);     //5
   }
   return c;
}
obj.c();         //this指向obj

9.下面代码输出什么?

function fn(a,b,c){}
fn.fn = function(){
   console.log(this.length);  //this指向fn函数 函数的长度就是参数的个数
};
fn.fn();         //3

10.下面代码输出什么?

var arr = [1,3,5,7,9];
function fn(){
   this.arr = [2,4,6,8,10];
   arr.forEach( function(){ //自执行函数this指向window
      console.log(this.arr); 
   })
};
new fn();       //[1,3,5,7,9]

11.下面代码输出什么?

function test(){
   var n = 4399;
   function add(){
      n++;
      console.log(n); 
   };
   return {n,add}  //只是让对象内的n值=外部var n的值 两个n并不是同一个n
}

var result1 = test();
var result2 = test();
result1.add();           //4400
result1.add();           //4401
console.log(result1.n);  //4399  (result1.n并没用参与计算)
result2.add();           //4400  (函数每次执行都会生成对应的AO对象)

12.下面代码输出什么?

var out = 25,
  inner = {
	  out:20,
	  func:function(){
	    var out = 30;
	    return this.out;
	  }
  }
//考点:逗号运算符 (1,2) => 2   得到后面的数
console.log((inner.func, inner.func)());  //25       (括号内得到的是一个函数)(函数自执行this执行window)
console.log(inner.func());                //20       this指向inner
console.log((inner.func = inner.func)()); //25       =是赋值运算符得到的是一个单纯的函数,函数自执行this指向window

13.下面代码输出什么?

var a = 1;
var b = 2[a,b] = [b,a]
//b = 2[1,undefined] = [undefined, 1]
//b = undefined = [undefined, 1]
console.log(a);           //1
console.log(b);           //[ undefined , 1 ]
console.log(undefined);   //undefined
//考点:逗号运算符 [1,2] => 2   得到后面的数

14.下面代码输出什么?

function fun(n,o){
  console.log(o);
  return{
    fn: function(m){
      return fun(m,n);
    }
  }
}
var a = fun(0);  	//undefined
a.fn(1);   			//0
a.fn(2);   			//0
a.fn(3);   			//0
a.fn(1).fn(2).fn(3);    //0 1 2
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值