目录
JS函数
普通函数
参数默认值函数
{
function text(x,y="word!"){
console.log(x,y);
}
//调用
text("Hello");
}
这种是在制定方法的时候就已经给参数定义了初始值,假如调用给方法的时候,有给新的参数来覆盖的话,就覆盖默认值,就算不给该参数也有默认值
REST参数函数
argument
arguments的也是个对象,而且是一个特殊的对象,它的属性名是按照传入参数的序列来的,它还有length属性,存储的是当前传入函数参数的个数,这种对象叫做类数组对象.
arguments.callee完完整整的把这个函数的这段代码返回
{
function tt(){
for(let a=0; a<arguments.length;a++){
console.log(arguments[a]);
}
}
tt(1,34,34,45,'a');
}
...
{
function tt(...a){
for(let v of a){
console.log(v);
}
}
tt(1,23,43,25,53);
}
扩展运算符函数
把数组变成字符串的最快方法,严格来说他并不算是一个函数,只能说是一个比较特殊的应用
{
console.log([1,2,3,4,5,6,7]); //[1, 2, 3, 4, 5, 6, 7]
console.log(...[1,2,3,4,5,6,7]); //1 2 3 4 5 6 7
console.log('a',...[1,2,3,4,5,6]);//a 1 2 3 4 5 6
}
箭头函数
{
let add = v => v*2;
console.log(add(4));//8
}
{
let return5 = () => 5;
console.log(return5());//5
}
格式是前面的是方法名,中间的是参数,最后面的是方法体,假如没有参数,也要在中间写上一个参数来代替;
在js中==比较的是两者的字符是否相等,不区分类型,相当于java中的equals
===比较的就是内存地址,假如两者的内存地址一样才算是同一个对象,相当于java中的==
尾调函数
递归:在一个方法的最后子啊调用自己,相当于无限循环
作用:用来保持监听
但是有一个致命的缺点:会导致函数的地址嵌套,资源奔溃,所以现在一般是不用了的,改用尾调函数来代替
//尾调函数:在方法的最后一句调用其他的方法
{
function fx(x){
console.log(fx);
return tail(x);
}
function tail(x){
console.log(tail);
return fx(x);
}
tail(2);
}
函数的10种调用方式
普通调用方法
{
function text(){
console.log("TEXT");
}
text();
}
call调用
{
function text(str){
console.log(str);
}
//调用对象必须写在第一位
text.call(text,"diaoyong");
}
调用对象必须写在第一位
apply调用
{
function text(str){
console.log(str);
}
//调用对象必须写在第一位
text.apply(text,["diaoyong"]);
}
构造调用
{
function text(str){
console.log(str);
}
new text("构造调用");
}
模板调用
{
function text(str){
console.log(str);
}
text `模板调用`;//["模板调用", raw: Array(1)]
}
定时器调用
自动调用:它的调用时间是所有调用方法执行完毕以后才会执行的
{
function text(str){
console.log(str);
}
setTimeout(text,0,"定时器调用");
}
普通函数转化为函数表达式调用
const text = function(test){
console.log(test);
}("jin");
函数表达式的三种调用:
普通调用
{
const text = function(text){
console.log(text);
}("这就是直接调用,假如没有参数的话是不允许这样调用的");
}
正常调用
箭头函数调用
{
const test = new Function("x","y",console.log("x"+"y"));
}
方法特别简单的时候就可以这样写,假如只有一个参数就是方法体,假如有多个参数,前两个就是参数,最后一个就是方法体