关于函数的一些面试题

关于函数的面试题一直是前工程师的一个考点!
我们分析一下几个题:

在这里插入代码片
	//第一题
		 var a=10;
  		 function aaa(a){ 
       	 	alert(a);
       	 	var a=20; 
  		 } 
 		    aaa(a);

很简单的一题, 此时打印出来的结果是几,这是一道关于作用域的一道题!
在函数 aaa 的AO 生成时形参和实参的统一,带入的就是GO中 a = 10 的值;所以输出是 10;

在这里插入代码片
 第二题
 		 var i = 10;

 		 function fun() {
 		 	 i = 100;
 		 	 console.log(i);
 		 	 for (var i = 0; i < 6; i++) {
 		 	  	console.log(i);
 		 	  } 
 		 	  console.log(this.i);
 		 	  console.log(i);
 		 }
 		 fun();
 		 console.log(i);

这题比上题要复杂的多;
首先GO中 i= 10; 和函数体;
这题的坑有两个, 第一个 for 循环的var 关键字会提前, 所以函数中的 那个 i= 100 不会污染全局, 第二个 this 指向的全局

在这里插入代码片
	
		var a = 10;
		fun(1,2);
		var b = 20;
		function fun(m,n) {
			console.log(a); //10
			// console.log(a + c); //报错
			console.log(++a + b++);//NAN
			var f;
			c = 10;
			console.log(a + c++); //21
			console.log(m + n);   // 3
			console.log(m + b);  // NAN
			console.log(typeof m);  //number
			

		}
		console.log(c) // 11	

这题中的考点 :
1.函数内 没有创建 a 所以调用GO中a 的值;
2.var b = 20 在函数执行的后面 所以只是的 b 赋值是 undefined;
3 。 undefined + number = NAN;
4. 函数中 c= 10 会将c 变为全局变量, 不过需要 执行上下文到这一行 ;

在这里插入代码片
	console.log(1 +undefined); //NAN
		console.log('1' + +undefined);//1NAN

		console.log(1 + +null);//1
		console.log('1' + +null);//10

考点 加号 会做一个 隐士转换, 转为number类型!然后undefined转为number类型是NAN , null 是 0;

给大家一些对于这两个值的理解

// undefined:
// (1)变量被声明了,但没有赋值时,就等于undefined。
// (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
// (3)对象没有赋值的属性,该属性的值为undefined。
// (4)函数没有返回值时,默认返回undefined。

// 	null:
// 	(1) 作为函数的参数,表示该函数的参数不是对象。
// 	(2) 作为对象原型链的终点。
在这里插入代码片
		(function(){
  			 var a = b = 5;
			})();
			console.log(b);
			console.log(a);

这是一个立即执行函数;我们可以将函数内部解释为;
var a = b;
b = 5;
所以 函数执行关闭后 a消失了 而 b 变为了 全局变量

在这里插入代码片
				var a = 6;
			setTimeout(function () {
	  			alert(a); //66
	 		  a = 666;
				}, 1000);
					a = 66;

这题是定时器的一个考点 里面是一个函数!;

在这里插入代码片

 var a = {n:10,m:20};
		 var b = a;
		 b.n = 30;
		 console.log(a == b); //true
		 console.log(a === b); // true
		 console.log(a.n); // 30 
		 console.log(b); //object{}

这题 数组和对象都是存放在堆当中;复制的只是地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值