传参
在JS中,没有语言层面的必传参数。
function fun(a, b, c) {
console.log(1);
}
// 没传参
fun(); // 1 正常执行
但有的时候就是需要必填参数,比如:
function 买买买(钱) {
// ...
}
这种情况怎么办?
语言层面上没有,我们就只能自己实现一个了
function 买买买(钱) {
if(钱 === undefined) // 如果没有传入参数
throw new Error('钱呢?!'); // 报错并停止执行
// ...
console.log('爸爸!');
}
买买买(); // Uncaught Error: 钱呢?!
买买买(666); // "爸爸!"
return
返回执行结果。
function 谁最美() {
return '你';
}
var 美人 = 谁最美();
console.log(美人); // "你"
在函数中一旦return
,之后的所有语句都不会执行,因为它已经完成任务了,return
就是返回成果用的。
function yo() {
return 'biu';
// 以下内容通通不会执行
console.log('yo');
console.log('yoo');
console.log('yooo');
}
yo(); // "biu"
function 想多次返回() {
return 1; // 停!
return 2; // 不存在的
return 3; // 不存在的
}
想多次返回(); // 1
所以以后你会看到很多人这么写判断
function 买买买(钱) {
// 如果没有钱就直接返回,后面的代码不会执行,否则if里的代码会被跳过,直接发货。
if(!钱) {
return '钱呢?!';
}
return '爸爸!';
}
买买买(); // "钱呢?!"
买买买(666); // "爸爸!"
然后,慢慢的你也会这么干,因为省的写else
了,谁叫我们懒呢(^・ω・^ )
回调函数
有时候你想在一段函数中插入一段自定义代码,这段代码在不同的情况下可以是不同的:
function 买() {
console.log('交易成功')
// 我还想在这一步发货呢
// 我还想在这一步发短信通知买家已发货呢
}
买(); // "交易成功"
这种情况我们就可以把我们想做的写到一个函数里,交给买()
来执行:
function 买(一旦交易成功) {
console.log('交易成功')
/*检测是否有回调函数*/
if(一旦交易成功) {
/*如果有回调函数就触发它*/
一旦交易成功();
}
}
function 发货() {
console.log('发货');
console.log('短信通知买家已发货');
}
买(发货); // "交易成功" "发货" "短信通知买家已发货"
这不就相当于在一个函数中插入一段自定义代码吗?
如何动态的获取传参?(并不限制传参的个数)
使用arguments
关键词
function 粘合() {
// 将arguments对象转换为数组
var arr_args = Array.prototype.slice.call(arguments); // 这句懵逼不要怕,后面弄懂this就清楚了
// 将转换后的数组用空字符串连接起来
return arr_args.join('');
}
粘合('Y', 'o', 'oo', 'ooo'); // "Yoooooo"
登录后评论