理解函数的本质

函数的预编译

首先我们需要了解javaScript函数预编译过程:

1、创建AO对象(执行期上下文 ),寻找函数形参和变量声明。
2、把形参和变量名作为AO属性名,值为undefined。
3、把实参赋给形参,实参形参相统一。
4、寻找函数声明,赋值函数体。
5、函数开始执行。

代码实例

 function fun(zhang){
 	console.log(zhang);
 	var zhang = '小张';
 	consoloe.log(zhang);
 	function zhang(){return "小张真好看"}
 	console.log(zhang);
 	var wang = function() {return "小王也好看"}
	console.log(wang);
	function li(){return "小李也好看"}
}
fun("小张说")

执行结果如下:
执行结果

执行过程:
在这里插入图片描述
计算机执行到fun()函数时,在执行的前一刻会创建一个AO对象。
ao{

}
这是第一步,创建了一个ao对象。
第二步是将函数内所有的形参和变量声明储存到ao对象中,value值为undefined;

第三步将形参和实参进行统一。
也就是函数fun内的所有函数声明提前到fun最顶部,函数提升
可以看到第七行:
var wang = function() {return “小王也好看”}
这是一个函数表达式,不是函数声明。
这里预编译结束,函数开始一行一行的执行,遇到console.log命令就打印结果。

JavaScript中常用的函数类型

1、可变函数

<script> 
   
    function show(){ 
      alert("第一个。。。"); 
    } 
      
    
    function show(str){ 
    alert("第二个"); 
    } 
    function show(a,b){ 
      alert("第三个。。。"); 
      alert(a+":"+b); 
    } 
</script>  
 <script> 
      
    show();//当调用之后,会把前面的冲掉 //undefined:undefined 
    show(111);//当调用之后,会把前面的冲掉 // 11:undefined 
    show("a","b");//当调用之后,会把前面的冲掉//a:b 
    show(1,2,3,4);//1:2 
 </script>

可变参数的函数: 在js中都是可变参数的函数
1 函数虽然定义时是声明成两个参数,但调用时却是可以传入任意个
2 每个函数中,存在一个 默认的数组arguments ,里面存储着本次调用时传入的所有实参

2、匿名函数

<script> 
    var res =function(a,b){
    return a+b; 
    };   
    alert("sum="+res(1,2));//sum=3 
    alert("res="+res("abc","def"));//res=abcdef 
</script> 

错误的匿名函数

function(a,b){
    return a+b; 
};

怎么解决?
可以通过运算符:+ - !
但是只能这三个才可以实现

+
function(a,b){
    return a+b; 
}

-
function(a,b){
    return a+b; 
}

!
function(a,b){
    return a+b; 
}

3、动态函数(也叫构造函数)
利用Js当中内置的对象Function来构造一个函数,构造方法中的第1个参数是“形参”,第2个参数是“函数体”。

<script> 
  var res=new Function("x,y","var sum=0;sum=x+y;return sum;") 
  var sum=res(12,34);//46 
  var sum=res("abc","bss");//abcbss 
  alert("sum="+sum); 
</script> 

思想类似于Java当中的类反射。我们平时写函数时通常不用,但关键的地方一写,整个程序的功能会变得很活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值