前端面试题--函数调用(有参数)

1.立即执行函数

var z = 10;
function foo() {
	console.log('z',z); //10
}
(function(funArg) {
	var z = 20;
	funArg();
	//console.log(funArg)
	/*
	 	ƒ foo() {
			console.log('z',z); //10
		}
	 */
})(foo);

控制台直接打印10

*************************************************************************************************************************************************

 

2.带返回值的函数

function fun(n, o) {
	console.log('o',o);//undefined 0 0 0
	return {
		fun: function(m) {
			console.log(m,n);//1 0,2 0,3 0
			return fun(m, n);
		}
	}
}
var a = fun(0);
a.fun(1); 
a.fun(2); 
a.fun(3); 

*************************************************************************************************************************************************

 

3.带返回值的函数--链式调用

function fun(n, o) {
	console.log('o1',o);//undefined 0 1 2
	return {
		fun: function(m) {
			console.log(m,n)//1 0,2 1,3 2
			return fun(m, n);
		}
	}
}
var b = fun(0).fun(1).fun(2).fun(3); 

这里的链式调用的原理就是在调用函数后返回函数本身

*************************************************************************************************************************************************

 

4.稍微改变一下,加深理解链式调用和普通调用的区别

function fun(n, o) {
	console.log('o2',o); //undefined 0 1 1
	return {
		fun: function(m) {
			console.log(m, n)//1 0,2 1,3 1
			return fun(m, n);
		}
	}
}
var c = fun(0).fun(1);
c.fun(2); 
c.fun(3);

*************************************************************************************************************************************************

 

5.立即执行函数传参

var test = (function(a) {
	this.a = a;
	return function(b) {
		console.log(a,b)// 1 4
		return this.a + b;//1+4=5
	}
})(function(a, b) {
		console.log(a,b)// 1 2
		return a;
	}(1, 2));
console.log(test(4));

*************************************************************************************************************************************************

 

6.隐式转换

var a;
var b = a / 0;
console.log(b,b === b)//NaN false
if(b === b) {
	console.log(!b * 2 + "2" - 0 + 4);
} else {
	console.log(!b * 2 + "2" - 0 + 4);//1*2+'2'=22-0=>22+4=26
} //26
var a = 1;
var b = a / 0;
console.log(b,b === b)//Infinity true
if(b === b) {
	console.log(!b * 2 + "2" - 0 + 4);//0*2+'2'=02-0(转换为数字)=>2+4=6
} else {
	console.log(!b * 2 + "2" - 0 + 4);
} //6

*************************************************************************************************************************************************

 

7.声明提前

console.log('a',a); 
/*
	ƒ a() {
		console.log('1a',a); //ƒ a(){console.log(a);}
	}
 */
a();
/*
	 ƒ a() {
		console.log('1a',a); //ƒ a(){console.log(a);}
	 }
 */
var a = 3;

function a() {
	console.log('1a',a);
}

*************************************************************************************************************************************************

 

8.数组切片--不涉及函数调用

var arr1 = "john".split('');
var arr2 = arr1.reverse();
var arr3 = "jones".split('');
arr2.push(arr3);
console.log(arr1)
/*
 * (5) ["n", "h", "o", "j", Array(5)]
	0: "n"
	1: "h"
	2: "o"
	3: "j"
	4: (5) ["j", "o", "n", "e", "s"]
 */
console.log(arr1.length + '' + arr1.slice(-1));
//5    j,o,n,e,s

*************************************************************************************************************************************************

 

9.++在数字变量前和数字后的区别

//++在数字变量之前
var t = 10;
function test(t) {
	var t = ++t;
	console.log(t); //11
}
test(t);
console.log(t); //10


//++在数字变量之后
var t = 10;
function test(t) {
	var t = t++;
	console.log(t); //10
}
test(t);
console.log(t); //10

 

*************************************************************************************************************************************************

10.构造函数

function foo() {
	//可以看成把foo.a重新赋值
	foo.a = function() {
		console.log(1);
	}
	this.a = function() {
		console.log(2);
	}
	a = function() {
		console.log(3);
	}
	var a = function() {
		console.log(4);
	}
};
foo.prototype.a = function() {
	console.log(5);
}
foo.a = function() {
	console.log(6);
}

foo.a(); //6

var obj = new foo();
obj.a(); //2
foo.a(); //1

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值