欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javascript Function函数理解与实战

程序员文章站 2022-03-20 22:10:51
function函数是javascript的基础也是实现功能的一个引爆点,我们通过实例分析让你对function函数有一个更加深刻的理解以及在实际中的用法讲解。 func...

function函数是javascript的基础也是实现功能的一个引爆点,我们通过实例分析让你对function函数有一个更加深刻的理解以及在实际中的用法讲解。

function 确实是一个对象.而我们定义的任何一个函数其实都是function 对象的一个实例,也可以理解为指向 function 对象的一个实例.

既然是对象的一个实例,那肯定指向了function 类型的一个引用. 既然指向了一个引用类型的内存地址,那你也可以简单的把我们定义的函数理解为一个变量,这个变量指向了一个引用类型的地址,这个地址指向了function 对象的一个实例.

既然我们定义的函数其实是一个变量,那这个函数实例地址可以同时指向多个变量.

看下面的代码:

var add = new function("n", "m", "return n + m");

上面是标准的函数定义,调用了function对象的构造函数,这个构造函数把前面的n个参数都默认为新函数的参数,直到最后一个参数认为是新函数的函数体.

从上面的语句中非常直观的看到 add这个变量指向了一个function 类型的实例,但是这种命名方法非常繁琐,等价于:

(1)函数表达式

var add=function(n,m){
return n+m;
}

(2)函数申明

function add(n,m){
return n+m;
}

由于javascript语言中的申明提前,所以一版提倡用第二种方法定义函数,关于函数申明提前单独开辟一篇来说

但是第一种定义方法让人很直观看到 add 是一个指向函数实例的一个变量.

既然是一个变量,就可以赋值给其他变量,可以当做参数在函数中传递,也可以从函数返回.

所以 var add2=add3=add; 现在 三个变量都指向了这个实例的引用, 现在 add=null; 以后 add2,add3 俩个函数完全可以使用不受影响,因为add 移除函数对象的引用后指向了null的引用.所以根本不影响add2 和 add3 两个函数.

所以函数可以当做其他函数的参数传入.

所以函数可以当做函数的返回值返回.

因为函数名只是一个指向函数实例的变量,所以javascript中函数不会有 重载,因为相同的变量指向的是相同的引用地址.最后表示的还是同一个函数.

函数既然是对象的实例,那么就应该有属性,就应该有方法.所以javascript中的 函数有属性也有方法.

比较重要的4个属性 arguments , this , length , prototype

arguments 表示当前函数的参数类数组,这个属性很特殊,他自己还有个属性叫 callee ,

arguments.callee 属性保存了一个指针,指针指向了拥有此 arguments 属性的函数实体(也就相当于函数名)

this属性是当前环境,类似与c# 中的this,表示当前上下文

length 属性表示当前函数接收最大参数个数

prototype 表示该函数的原型,也就是把对象实例的方法完整的保存下来,换句话说就是原型上的方法都继承下来了.比如 tostring() valueof() 等.

接下来,我们来看看function函数种类

普通函数:介绍普通函数的特性:同名覆盖、arguments对象、默认返回值等。

function showname(name) {
 alert(name);
}

匿名函数:介绍匿名函数的特性:变量匿名函数、无名称匿名函数。

//变量匿名函数,左侧可以为变量、事件等
var anonymousnormal = function (p1, p2) {
 alert(p1+p2);
}
anonymousnormal(3,6);//输出9

闭包函数:介绍闭包函数的特性。

function funa() {
 var i = 0;
 function funb() { //闭包函数funb
  i++;
  alert(i)
 }
 return funb;
}
var allshowa = funa(); //全局变量引用:累加输出1,2,3,4等
 
function partshowa() {
 var showa = funa();//局部变量引用:只输出1
 showa();
}