天天看点

javaScript中将函数作为参数

马上要到2020年了,元旦将至,自己2019年定下的一些学习计划,还有一部分没有完成,有些遗憾,2020年更要加油,共勉。

javaScript中将函数作为参数
javaScript中将函数作为参数
javaScript中将函数作为参数
javaScript中将函数作为参数
javaScript中将函数作为参数
javaScript中将函数作为参数
javaScript中将函数作为参数
javaScript中将函数作为参数
javaScript中将函数作为参数
javaScript中将函数作为参数
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>javaScript中将函数作为参数</title>
<script type="text/javascript">
/*
arguments 对象实际上是所在函数的一个内置类数组对象。
每个函数都有一个arguments属性,表示函数的实参集合,这里的实参是重点,就是执行函数时实际传入的参数的集合。
*/
function fn1(){
//arguments不是数组而是一个对象,但它和数组很相似,所以通常称为类数组对象
//以后看到类数组其实就表示arguments。arguments对象不能显式的创建,它只有在函数开始时才可用。
	console.log(arguments);
	//arguments对象可以检测参数个数,模拟函数重载
	//arguments.length为函数实参个数,可以用arguments[length]显示调用参数
	console.log('实参个数=' + arguments.length);
	console.log(arguments.callee === fn1); //结果为true
	//arguments不是数组,而是一个类数组对象
	console.log(arguments instanceof Array); //结果为false
  	console.log(Array.isArray(arguments)); //结果为false
  	console.log(arguments instanceof Object); //结果为true
	console.log(this);
	console.log('**********************');
}

fn1();
var jsonStr = {"name":"令狐冲", "age":"17", "hobby":"任盈盈"};
fn1(jsonStr);
var userNames = ['苏荃', '双儿', '方怡', '沐剑屏', '阿珂', '建宁公主', '曾柔'];
fn1(userNames);
fn1('江西省赣州市于都县');
fn1(666);
//在javascript中,字符串既可以用双引号又可以用单引号包起来
fn1("江西省赣州市于都县", 888);
fn1('江西省赣州市于都县', 999, 656.58);
fn1(23, '江西省赣州市于都县', 182.67);
fn1('令狐冲', [1,2,3], {name:'韦小宝 '});

//求传入的若干个数字(不能用数组显示传入)的和
function number_sum(){
	var parameterCount = arguments.length;
	var sum = 0;
	for (var index = 0; index < parameterCount; index++) {
		sum += arguments[index];
	}
	return sum;
}

var sum_result = number_sum(66, 2, 10);
console.log('多个数的和=' + sum_result);
sum_result = number_sum(60, 2, 20);
console.log('多个数的和=' + sum_result);


function fn2(){
	console.log('我是fn2()函数');
}

//将函数作为参数
fn1(fn2);//传函数名
//传匿名函数
fn1(function(){
	console.log('hello');
});

console.log('###############################');
function fn3(){
	console.log('我是fn3()函数');
}

var result = fn3;
console.log(result);
//fn3()函数返回值是undefined
result = fn3();
console.log(result);
console.log(fn3());

function fn4(){
	console.log('我是fn4()函数');
	return '江西省赣州市于都县666';
}

//fn4()函数返回值是江西省赣州市于都县666
result = fn4();
console.log(result);//打印江西省赣州市于都县666


//模仿jquery,定义一个函数,函数名叫$
function $(youFunctionOrVariable){
	console.log(arguments instanceof Object);
	console.log(typeof youFunctionOrVariable === "function");
	if(typeof youFunctionOrVariable === "function"){
		console.log("你传的是一个函数.......");
		youFunctionOrVariable();
	}else{
		console.log("你传的是一个普通变量.......你传的变量是" + youFunctionOrVariable);
	}
}

//将匿名函数作为参数,即传一个匿名函数
$(function(){
	console.log('我是一个匿名函数......');
});

//定义一个普通函数
function a(){
	console.log('我是a()函数......');
}

//将函数名作为参数
$(a);

//传一个普通变量
$('hi');
//传一个普通变量
$(2020);
//传一个普通变量
$(2021.86);

function $2(youFunctionOrVariable){
	//
	console.log("*==* " + (arguments instanceof Object));
	console.log("*==* " + (typeof youFunctionOrVariable === "function"));
	//
	eval(youFunctionOrVariable);
}

function b(){
	console.log('我是b()函数......');
}

function c(p){
	console.log('我是c()函数......传的参数是' + p);
}

console.log('------------------------------------------');
$2('b()');//$2函数中的eval()函数后执行
$2('c("江西省赣州市于都县赣南脐橙")');//$2函数中的eval()函数后执行
$2(c("于都县番薯干"));//$2函数中的eval()函数先执行
$2(c('于都县酸枣糕'));//$2函数中的eval()函数先执行
$2(c(888999));//$2函数中的eval()函数先执行
// $2('I Love China');//报错SyntaxError: unexpected token: identifier


console.log('¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥');
function $3(youFunctionOrVariable, functionParameter) {
	console.log(functionParameter == null);
	if (functionParameter == null) {
		youFunctionOrVariable();
	} else {
		youFunctionOrVariable(functionParameter);
	}
}

function showHometown(p){
	console.log('我是showHometown()函数......传的参数是' + p);
}

//传函数名和参数
$3(showHometown, '江西省于都县');
$3(showHometown, 1698);
//传函数名
$3(showHometown);
//传匿名函数
$3(function(){
	console.log('大家好.....我是匿名函数')
});
//传匿名函数和参数
$3(function(){
	console.log('hi.....我是匿名函数,参数是' + arguments[arguments.length-1])
}, '一万年太久只争朝夕');
//传匿名函数和参数
$3(function(p){
	console.log('hello.....在下是匿名函数,参数是' + p)
}, '马上2020年了');

console.log('*********************************');
//js是一门弱类型的编程语言,该编程语言的语法不是那么严谨,如下:形参和实参的个数可以不一致
function test1(){
	console.log('我是test1()函数,传了' + arguments.length + '个参数');
}

//形参和实参的个数可以不一致
//不传参数
test1();
//传1个参数
test1('中国');
//传2个参数
test1(89.56, '红红火火恍恍惚惚');
//传3个参数
test1('hello', 6688, 68.56);

console.log('*********************************');

function test2(Param1, Param2, Param3, Param4, Param5){
	console.log('我是test2()函数,传了' + arguments.length + '个参数');
}

//形参和实参的个数可以不一致
//不传参数
test2();
//传1个参数
test2('I Love You');
//传2个参数
test2('哈哈哈', 536);
//传3个参数
test2(234, 78.93, '呵呵呵');
</script>
</head>
<body style="background-color: #CCE8CF;">
	<h3 style="color: #cd1636;">javaScript中将函数作为参数</h3>
	参考网页https://www.cnblogs.com/huangwenjietk/p/10850307.html<br/>
	参考网页https://blog.csdn.net/zjy_android_blog/article/details/80934042<br/>
	参考网页https://blog.csdn.net/qq_30583891/article/details/80576361<br/>
	参考网页https://www.cnblogs.com/luguankun/p/12041759.html<br/>
	参考网页https://blog.csdn.net/zhaihaohao1/article/details/86493543<br/>
</body>
</html>
           

继续阅读