ES引用类型 之 函数Function(摘至javaScript 高程3)

每个函数都是Function的实例,函数是对象,函数名实际上一个指向函数对象的指针,不会与某个函数绑定。
函数声明:

function sun(num1, num2){
           return num1 + num2;
}
法二:使用函数表达式定义函数
var sun = function(num1, num2){
       return num1 +num2;
}
法三:使用Function 构造函数定义
var sun = new Function('num1','num2','return num1+ num2');  //不推荐,其容易影响性能

函数名仅仅是指向函数的指针,故如下栗子:

function sum(a,b){
           return a+b;
       }
 alert(sum(10,10));      //20
 var anotherSum = sum;
 alert(anotherSum(10,20));    //30
 sum = null;
 alert(anotherSum(10,20))      //30

没有重载

 var sum = function(num){
       return num +100;
  }
  var sum = function(num){
       return num +200;
  }
  var rest = sum(100);
  console.log(rest)   //300

在创建第二个函数的时候,覆盖了引用第一个函数的变量 sum.

函数声明和函数表达式的区别
解析器在向执行环境加载数据的时候,优先读取函数声明;而函数表达式,等执行到其所在的代码行,才开始被执行。
举个栗子:

//函数声明
alert(sum(10,10))
 function sum(a,b){
       return a+b;
  }
//函数表达式:用 var 变量来声明函数
alert(sum(10,10))
 var sum = function(a,b){
       return a+b;
  }

补充说明:使用var 表达式定义函数, 只有变量声明提前了,变量初始化代码仍然在原来的位置
函数作为参数传递
ES中,函数名本身就是变量,所以函数可以作为值来使用。
举个栗子:无参函数的传递

function test1(Func){
      Func();
    }
function test2(){
  alert("我是test2");
}
test1(test2);    //我是test2

举个栗子:带参数的回调传递

var appendDiv=function(callback){
        for(var i=0;i<10;i++){
            var div =document.createElement('div');
            div.innerHTML=i;
            document.body.appendChild(div);
            if(typeof callback=='function'){
                callback(div);
            }
        }
    }
  appendDiv(function(node){
        var num = parseInt(node.innerHTML);
        if(num%2==0){
            node.style.display='none'
        }  
   });

这里写图片描述

猜你喜欢

转载自blog.csdn.net/Amy_cloud/article/details/79239549