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