函数

函数的声明

 

  函数的声明
        console.log(fn);
        fn();
        普通函数声明
        function fn(){
            console.log("aaa");
        }
     
        匿名函数声明
        var fn=function(){
            console.log("bbb");
        }
        fn();
 
 
 
 
 
 
 
  普通函数声明,当进入该script开始的时候,普通函数就会被存在堆中
        并且在栈中以函数名声明这个变量,并且指向堆中的这个函数,这种
        函数写在任何位置都不影响当前的代码顺序,可以忽略这个函数描述的位置
        都可以在任何位置调用到该函数
        匿名函数声明,只有当代码运行到var 定义匿名函数位置的时候才可以声明
        这个变量,并且指向堆中的这个匿名函数,在当前定义之前,栈中是没有
        这个函数,所以在这个定义之前是无法调用该函数,只能在定义后调用

        document.onclick=function(){

        }

        document={
            onclick:function(){

            }
        }

        这种就是自执行函数,允许到执行时执行内容
        console.log(0);
        (function(){
            console.log("aaa");
        })();
        
        自执行函数的目的是为了保障函数内外的变量不会出现混淆
        var a=3;
        (function(){
            var a=10;
            console.log(a);
        })();

        console.log(a);


箭头函数  另类的匿名函数
如果参数是1位,可以省略括号,如果没有参数或者参数是1个以上就需要写括号
如果函数只有一句话,没有花括号,就表示返回里面的内容,如果有多句话必须写花括号
        var fn=()=>{

        }

        var fn1=a=>++a;

        var fn2=(a,b)=>a+b;


创建构造函数的函数实例
构造函数产生函数实例,可以在Function()参数中加入需要添加函数中的参数以及语句块
最后一个参数一定就是语句块,前面的参数都是函数的参数
    var fn=new Function("a","b","c","console.log(a+b+c)");
    fn(3,4,5);
 
 
 var  xhr=new XMLHttpRequest();
   xhr.addEventListener("load",loadHandler);
   xhr.open("GET","./a.txt");
   xhr.send();

   function loadHandler(e){
        console.log( xhr.response);
        // 将硬回车和软回车替换为空字符串,去除前后空格
        var str=xhr.response.replace(/\r|\n/g,"").trim();
        // 正则表达式提取,将函数结构正则描述,两处小括号分别对应提取的群组
        // 第一个小括号提取函数参数部分,第二个小括号提取函数的语句块
        var arr=str.match(/^function.*?\((.*?)\)\{(.*)\}/);
        console.log(arr);
        // 将字符串函数部分删除,并且去除前后空格
        str=str.replace(arr[0],"").trim();
        // 切割分号
        var a=str.split(";");
        // 根据群组1作为参数,群组2作为语句块创建函数
       var fn=new Function(arr[1],arr[2]);
        a.forEach(function(item){
           item=item.replace(item.split(".")[0],"").slice(1);
           var s=item.split("=");
           if(s[0].trim().length==0)return;
           fn[s[0]]=s[1];
        })
        fn(3,5);
        for(var prop in fn){
            console.log(prop);
        }
   }

    
 
a.txt文件

function abc(a,b){
for(var i=0;i<5;i++){
a++;
++b;
}
console.log(a*b);
}
abc.a=10;
abc.f=20;

posted @ 2020-05-16 09:31  我是乐呀  阅读(115)  评论(0)    收藏  举报