js中神奇的函數指針


js中的函數指針是一個神奇的東西

  1. 定義function check(){};對於上面這個函數,check(函數名)就是函數指針,check指向函數主體,如果alert(ckeck),那么彈出的信息就是function(){…}
  2. 函數名就是函數指針,並且指向函數匿名函數主體,實際最好是替換,你可以將函數名替換為一個匿名函數即:function(){…},記住每個函數名都可以這樣替換
  3. 這里想說的是函數名運用時的幾個注意點:
    • 第一個例子:

                function  hanshu(){

                        alert("我被執行了");
                }
                function diaoyong(){
                        return hanshu();//注意這里,看似返回了函數,實際是什么都沒返回,代碼效果是在這執行了這個函數,你可以按照上面所說將匿名函數代進去看看.
                                                      正確的應該是return hanshu;
                }
                var obj=diaoyong();
 
    • 第二個例子
                obj.addEventListener("click",hanshu()); 
                或者
                obj.onclick=hanshu();
                如果你這么寫就大錯特錯了,原因還是一樣,你根本都沒添加任何監聽事件,代碼效果就好比,hanshu();一樣,也就是在這個代碼段中獎函數執行了一邊
                正確的寫法應該是
                obj.addEventListener("click",hanshu); 
                或者
                obj.onclick=hanshu;
    • 第三個例子
                setInterval("hanshu()",1000);
                經過上面那兩個例子,你是不是認為這樣做也錯了,這樣寫是對的,也只能這樣寫,因為這個hanshu()外面有引號,意思就是每個1秒,執行引號里面的內容即:hanshu(),
                你可以這樣理解setInterval("alert('引號就好比作用域一樣,外面加個引號,就好比加個匿名函數包圍')");
                懂了吧
 
實際總結就是,只要外面沒加引號,函數名加個括號就代表執行函數,特別是你返回一個函數時,一定要注意這點,你如果想傳遞一個函數,那么只需傳遞函數名就可以了           
最好的方法就是記住函數名替換思想 
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

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



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