js函数面试题

题目一
	function fun(){
		var i=0;
		return function(){
			document.write(i++);
		}
	}
	var f1=fun();
		f2=fun();
	f1();//0
	f1();//1
	f2();//0

这是一个闭包,f1()和f2()执行的是function(),但是fun()中的i此时还在内存中,所以i是可以被调用,主要点在于f1()和f2()分别创建了两个各自的执行环境
,两者之间互不影响,所以结果是 0 1 0。

题目二
	var color = 'red';
	var test = {
		color:'blue',
		getColor:function(){
			var color='green';
			alert(this.color);
		}
	}
	var getColor=test.getColor;
	getColor();
	test.getColor();
	//输出red  blue

var getColor=test.getColor; 代表的是 function函数的代码赋给getColor,
所以此时 getColor(); 为

		function(){
			var color='green';
			alert(this.color);
		}

再根据this总是指向调用它的对象,此时是window调用,所以输出 red
test.getColor(); 此时this指向test,所以输出blue。

题目三
var i = 10
function aaa () {
    i = 20
    console.log(i)  //20
    for (var i = 0; i < 6; i++) {
        console.log(i)  // 0 1 2 3 4 5
    }
    console.log(this.i) //g 10
    console.log(i) // 6
 
}
aaa()
console.log(i)//10

第一个输出 由于给局部变量i赋值 所以输出20
第二个输出for循环 输出0 1 2 3 4 5,当i = 6时终止循环
第三个输出,在一般函数中使用this指代全局对象,此是this.i = window.i 输出10
第四个输出,上面for循环结束后i =6 ,所以输出6
第五个输出,输出全局变量 i =10

题目四
	+function(){
     var a=5;
      function a(){}
     alert(a)   //5
     function b(){}
     b=6;
     alert(b);    // 6
     var c=d=b;
     //var c = d = b; 可以写为 d = b; var c =  d;
     //所以b被赋值给window下的d,c是私有变量,所以window下没有定义c;
     
  }()
  alert(d);    // 6
  alert(c);    //报错 c is not defined
题目五
	function fn(){
    console.log(11);
    function ff(){
      console.log(22)
    }
    ff()
  }
  fn();      //11   22
  ff();        //报错 ff is not defined
题目六
var User = {
  count: 1,
  getCount: function () {
    return this.count;
  }
};
console.log(User.getCount()); // 1
var func = User.getCount;
console.log(func()); // undefined

getCount函数被User对象调用,所以this指向的是User,输出1。
func变量接收的是一个函数体:func()执行的时候, this指的是window, 而window中没有count这个属性。 所以,返回的是undefined。

题目七
var y = 'global';
function test(x){
	(function(){
		if(x){
			var y = 'local';
		}
	})();
	return y;
}
console.log(test(true));//global

var y = 'local’这一句中y的作用域是匿名函数,即this指向Windows,故返回全局变量global

题目八
function fn(i) {
	return function (n){
		console.log(n + (i++));
	}
}
var f = fn(10);
f(20);	//30
fn(20)(40); //60
fn(40)(50); // 90
f(30);	//41

题目九
	var arr = [1,2,3,4];
	function fn(arr) {
		arr[0] = 0;
		arr = [0];	//arr指向新的引用地址
		arr[0] = 100;
		return arr;
	}
	var res = fn(arr);
	console.log(arr,res);
	// [0,2,3,4]  [100]

题目十
	var a = 9;
	function fn() {
		a = 0;
		return function (b) {
			return b + a++;
		}
	}
	var f = fn();
	console.log(f(5));	//5
	console.log(fn()(5));  //5
	console.log(f(5));	//6
	console.log(a); //2
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值