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