js函数进阶

全局函数

全局函数会压入window对象中,可能会覆盖了window里面的方法

console.log(window.screenX); //2200
function screenX() {
  return "xcxxx";
}
console.log(screenX()); //xcxxx

使用let/const时不会压入 window

let hd = function() {
  console.log("xxxx");
};
window.hd(); //window.hd is not a function

匿名函数

函数是对象所以可以通过赋值来指向到函数对象的指针,当然指针也可以传递给其他变量,注意后面要以;结束。下面使用函数表达式将 匿名函数 赋值给变量

let xx=function(){
            console.log('匿名函数');
        }

具名函数

具名函数可以 使用在声明的上面,而匿名函数不行,Js在解析代码的时候会把具名函数提升到上面,所以可以这样

 xx()
        function xx(){
            console.log('具名函数');
        }

函数中的变量提升

标准声明的函数优先级更高,解析器会优先提取函数并放在代码树顶端,所以标准声明函数位置不限制,所以下面的代码可以正常执行。

var xx=function(){
            console.log('匿名函数');
        }
       
        function xx(){
            console.log('具名函数');
        }
       
        xx()//匿名函数
  		xx() //具名函数
        var xx=function(){
            console.log('匿名函数');
        }
       
        function xx(){
            console.log('具名函数');
        }
       
  function xx(){
            console.log('具名函数');
        }
        var xx=function(){
            console.log('匿名函数');
        }
        xx()//匿名函数

arguments

arguments 是函数获得到所有参数集合,下面是使用 arguments 求和的例子,是函数里面自带的对象

function sum() {
  return [...arguments].reduce((total, num) => {
    return (total += num);
  }, 0);
}
console.log(sum(2, 3, 4, 2, 6)); //17

更建议使用展示语法来接收所有的参数

function sum(...args) {
 return args.reduce((a, b) => a + b);
}
console.log(sum(2, 3, 4, 2, 6)); //17

递归

//阶乘
function factorial(num){
            if(num==1)return 1
            else  return num*factorial(--num)
        }
      console.log(factorial(5));  

//累加
function add(...arg){
            if(arg.length==0){
                return 0
            }
           else 
                return arg.pop()+add(...arg)//这里需要展开,不然就变成了多维数组了
            
      }
     console.log(add(1,2,3)); 

//简化写法
 function add(...arg){
        return arg.length>0?arg.pop()+add(...arg):0
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值