JavaScript学习笔记(函数)

函数就是封装一些JS变量,表达式,语句的代码块,能指定输入和输出,在一些时机调用执行代码

创建函数的方式

  • 函数声明

    funtion funName(num){
    	alert(num)
    }
    
  • 函数表达式

    var funName = function(num){
    	alert(num)
    }
    
  • 通过Function构造函数声明
    传入的最后一个参数是函数体字符串,解析消耗性能,对于复杂的函数逻辑,写起来也复杂,因此不常用

    var funName = new Function('num','return num')
    

函数声明和函数表达式的区别

函数声明具有声明提前的特点,也就是函数调用可以在函数声明之前,而函数表达式只 能先给变量赋值函数,再通过变量调用函数

//函数声明
fun()//正常执行
function fun(){}
//函数表达式
fun2();//会报错
var fun2=funtion(){}

函数没有重载
对于其他语言,声明两个同名函数,传不同的参数就相当于两个不同的函数,但是对于js函数,结果就不同了

function funName(){
	alert(200)
}
function funName(){
	alert(300)
}
funName()//300

上面代码声明了两个同名函数,调用函数,只执行了第二个,换成下面的写法容易理解为什么会这样了

var funName = function (){
	alert(200)
}
funName = function (){
	alert(300)
}
funName()//300

JS函数名只是函数的指针,声明同名函数,只是把这个指针重新赋值,所以函数没有重载入,可以通过传入的参数不同,在函数内部处理不同逻辑,实现重载入的效果

函数内部两个特殊对象

  • arguments

    arguments对象是一个类数组,包含函数实际传入的参数,arguments又一个callee属性,指向当前函数

    //递归时callee属性的应用
    function factorial(num){
        if (num <=1) {
            return 1;
        } else {
            return num * arguments.callee(num-1)
    } }
    
  • this

    this是一个指针,指向函数运行时所在执行环境对象,对象

    关于this的详细内容会单独写一篇文章梳理

函数的属性和方法
因为函数是对象,所以函数拥有属性和方法
函数的属性:

  • length 表示函数的形参数量

    function funName(num1,num2){
    }
    alert(funName.length)//2
    
  • prototype一个指针,指向函数的原型对象
    原型的理解一章有详细说明

函数的方法:

  • call()
  • apply()
  • bind()

以上三个方法用于改变this指向,扩展函数执行作用域,使函数与对象解耦

  • toLocalString()
  • toString()
  • valueOf()

其中,toLocalString(),toString(),valueOf()是从Objetct继承来的

函数的一些特殊用法

  • 作为值传递
  • 递归调用
  • 闭包
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值