JavaScript学习笔记(函数)

因为函数可以说是在JS编程中的占据核心地位,所以单独写个文章梳理一下函数知识,有错误或者理解偏差欢迎指正

个人理解,函数就是封装一些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继承来的

函数的一些特殊用法

  • 作为值传递
  • 递归调用
  • 闭包
发布了34 篇原创文章 · 获赞 2 · 访问量 1650

猜你喜欢

转载自blog.csdn.net/liu_xiaoru/article/details/100798155