Function

来源:互联网 发布:监控与数据采集 编辑:程序博客网 时间:2024/06/05 07:00

一.定义函数的方式
1.函数声明的方式

function  funName(形参){  函数体,} funName(实参);

2.函数表达式

var funName=function(形参){  函数体}funName(实参);

3.区别:函数声明的方式有函数声明提升;(在js哪个地方都可以调用使用,而函数表达式只能在他本身的下面,调用才可以);
4.函数表达式的作用:可以当做值来处理;
更多的时候叫匿名函数;有自己的作用域

 const num=11;    (function(){       const num=222;        console.log(num);//222    })();    console.log(num)//11

二.函数作用域
定义:在函数体内声明的所有变量在函数体内始终是可见的,每个函数都有自己的作用域;
变量:全局变量。局部变量
特征:
1.局部变量的优先级比同名全局变量的优先级高;

   const num=10;    function aa(){        const num=11;        console.log(num);//11    }   aa();   //函数声明的函数,木有调用的话,只是一段代码而已,木有任何价值;    console.log(num);//10   函数作用域使局部变量名的优先级比同名的全局高;   2.函数体内没有var关键字的变量还是一个全局变量;     var num=10;     function aa(){        num=20;//全局变量        console.log(num)//20     }     aa();     console.log(num);//20     3.在定义函数的时候,形参也是一个局部变量;     4.函数体外的不能访问函数体内的局部变量;

demo:函数声明:

function outer(){        function inner(){            return 100;        }        return inner()    }   console.log(outer());//100

函数表达式:
demo1:

 function outer(){      var aa=function inner(){            return 100;        };        return aa() //返回的是一个值    }   console.log(outer());//100

demo2:

 function outer(){      var aa=function inner(){            return 100;        };        return aa;//返回的是一个函数    }   console.log(outer()());//所有就要多()调用函数;

demo3:

 function outer(){      return function inner(){  //直接返回的是一个函数;            return 100;        };    }   console.log(outer()());

函数作用域的demos:

 function fun(){            num=10;  //没有关键词var等,就上升为全局变量了        }        fun();        console.log(num);//10

demo2:

          <div  id="div">点我试试</div>          <div  id="aa">点我</div>        //你需要啥就注入啥,window对象和document对象;        //依赖注入        (function($,document){ //形参            $('#div').on('click',function(){                alert(11111);            });            $('#aa').on('click',function(){                alert(222222);            });            //window.location.href="https://www.baidu.com";            var div=document.createElement('div');        })(jQuery,document);//实参

按钮按那个弹出当前的索引值:

             <button>按钮1</button>             <button>按钮2</button>             <button>按钮3</button>             (function(){        var aa=$('button');       for(var i=0;i<aa.length;i++){           aa[i].bb=i; //给数组每个都绑定一个bb的属性,并且把当前的索引值赋值给他;           aa[i].onclick=function(){               alert(this.bb+1);           }       }       function $(button){           return document.getElementsByTagName(button);       }    })()

函数表达式的写法(按钮问题)

  (function(){        var aa=$('button');        var bb=function(index){            aa[index].onclick=function(){                alert(index+1);            }        };       for(var i=0;i<aa.length;i++){         bb(i); //先执行这里;为什么bb写在上面;因为写在下面,执行不了;       }       function $(button){           return document.getElementsByTagName(button);       }    })()

自调用匿名函数:(还是按钮问题)

 (function(){        var aa=$('button');       for(var i=0;i<aa.length;i++){           (function(index){   //index形参               aa[index].onclick=function(){                   alert(index+1);               }           })(i)//实参       }       function $(button){           return document.getElementsByTagName(button);       }    })()