習慣沉默2017-05-18 10:52:06
為什麼這麼多人踩?我覺得是個好問題啊,閉包解決之
<button>click</button>
<script>
document.querySelector("button").addEventListener("click", fn('hello world'), false);
function fn(a) {
return function() {
alert(a);
}
}
</script>
给我你的怀抱2017-05-18 10:52:06
btn.addEventListener('click',function(){fn('params')});
function fn(data) {
alert(data)
}
這樣試試?
巴扎黑2017-05-18 10:52:06
我沒找到addEventListener的函數原型,在平常使用中我的感覺是。
addEventListener在捕捉觸發事件之後,給呼叫函數名後加()呼叫。
那麼
btn.addEventListener('click',fn,false);
的監聽事件addEventListener捕捉到click事件之後,執行的函數便是fn()
addEventListener有的這個弊端就是它不能添加帶參數的括號,即不能捕捉到click之後執行fn(1,2).
所以平常的時候,我都是用一個匿名函數function(){fn(1,2)}作為綁定函數。那麼程式碼變成這樣了:
btn.addEventListener('click',function(){fn(1,2)},false)
在捕捉click事件之後,觸發的函數便是
function(){fn(1,2)}()
即可實現觸發fn(1,2)這樣的帶參數函數。
對addEventListener函數還不是很熟,歡迎討論指正。