JS函數 -- 功能,語法,返回值,匿名函數,自調用匿名函數,全局變量與局部變量,arguments的使用


“JavaScript設計得最出色的就是它的函數的實現。” -- 《JavaScript語言精粹》

函數包含一組語句,它們是JS的基礎模塊單元,用於指定對象的行為。一般來說,所謂編程,就是將一組需求分解成一組函數與數據結構的技能。

1.函數的功能

代碼重復性使用

模塊化編程

2.語法:

使用函數前要先定義才能使用

函數定義有三個部分:函數名,參數列表,函數體

格式:

1 function 函數名([參數1, 參數2, ...]){
2 
3   函數執行部分;
4 
5   return 表達式;
6 
7 }

例如:

1 <script>
2     function display(first,second){
3         alert(first+second);
4     }
5     var i=10;
6     var j=20;
7     display(i,j);
8 </script>

在上面這個例子當中,first,second是形參,i,j是實參。

在函數執行過程中,形參值得改變不會影響實參。(按值傳遞)

但是對象數據類型,是按引用傳遞(按地址傳遞),其他數據類型都是按值傳遞。

比如,下面的例子,運行的結果是“aaa”

1 <script>
2     function display(obj){
3         obj.name='aaa';
4     }
5     var p= new Object();
6     p.name = 'bbb';
7     display(p);
8     alert(p.name);
9 </script>

3.關於函數的返回值問題

函數遇到return會立即返回,后面代碼不執行。

4.關於匿名函數

在JS當中每一個變量,包括函數都算是一個對象,都占據了內存地址。函數也是一種對象,占據了內存地址。內存包括,堆內存,棧內存,靜態區和代碼段。一般來說,變量名保存到棧內存中,變量對象的數據保存帶堆內存當中。因為堆比棧大,但棧比堆快。函數會保存到內存當中的代碼段中。代碼段中的數據的引用是通過棧內存中的一個名字指向的。

 1 <script>
 2     //變量是可以保存數據的,也可以保存地址的
 3     var i=10;
 4     alert(i);
 5     
 6     function display(){
 7         alert('123');
 8     }
 9     
10     i=display; //變量指向了這個函數的首地址
11     i(); //彈出123
12 </script>

在上面這個例子中,function display(){} 其實是,在window對象下添加一個叫display的變量,它指向了這個函數的首地址。其中i=dispaly的意思就是,我們讓window對象下的i指向這個函數的首地址。

匿名函數的用法

 1 <script>
 2     //匿名函數的前期
 3     var i=function display(){
 4         alert('123');
 5     }
 6     i();
 7     
 8     //匿名函數的用法
 9     var j=function(){
10         alert('123');
11     }
12     j();
13 </script>

5.自調用匿名函數

格式: (function(){})();

function(){} : 相當於返回首地址

(function(){}) : 把這部分看作是一個整體

(function(){})() : 相當於找到這個地址並執行

 1 <script>
 2     //自調用匿名函數
 3     (function(){
 4         alert('111');
 5     })();
 6     
 7     //帶參數的自調用匿名函數
 8     (function(para){
 9         alert(para);
10     })(222);    
11 </script>

自調用匿名函數的好處是,避免重名,自調用匿名函數只會在運行時執行一次,一般用於初始化。

 6.全局變量與局部變量

1 <script>
2     i=10;            //全局變量
3     var j=20;        //全局變量
4     function display(){
5         var k=30;    //局部變量
6         P=40;        //全局變量
7     }
8 </script>

在函數內定義的就是局部的,否則就是全局的。局部變量只在局部作用域起作用。如果函數內的變量沒有var聲明,會直接影響全局的。

機制:在JS中,如果某個變量沒有var聲明,會自動到上一層作用域中去找這個變量的聲明語句,如果找到,就使用,如果沒找到,繼續向上查找,一直查找到全局作用域為止。如果全局中仍然沒有這個變量的聲明語句,那么會自動在全局作用域進行聲明,這個就是JS中的作用域鏈。

局部訪問全局通過作用域鏈,全局訪問局部要通過閉包。

7.arguments的使用

在一個函數內部,可以使用arguments屬性,它表示函數的形參列表,是以數組形式體現的。

在定義一個函數的時候,它的實參個數必須要與形參個數保持一致,有時,我們定義函數時,形參數目不能固定,這個時候就要使用arguments。

1 <script>
2     function showname(){
3         //沒有定義形參,那么所有形參會自動存放到arguments這個屬性數組中
4         for(var i=0;i<arguments.length;i++){
5             document.write(arguments[i] + '<br>');
6         }
7     }
8     showname('zhangsan','lisi','wangwu');
9 </script>

沒有定義形參,那么所有形參會自動存放到arguments這個屬性數組中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM