? ? ? ?大家都知道各谚,在JS之中玫坛,一個(gè)變量的生命周期不是以大括號(hào)為界限的,所以即使是使用在循環(huán)或判斷中的變量反惕,外部也可以使用尝艘。可如果我們在循環(huán)或變量中使用了方法姿染,而且這個(gè)方法使用了循環(huán)中的變量背亥,那么后面的代碼是可以修改這個(gè)變量的值的,而不是,將值的內(nèi)容完全寫死在了循環(huán)里面的方法中狡汉。那么解決這個(gè)問題的一種方法就是娄徊,將方法寫出來,接收一個(gè)參數(shù)就可以了盾戴。
? ? ? ? 可是寄锐,在JS中傳遞的參數(shù)如果是方法,那么后面不能加上小括號(hào)尖啡,如果加上的話橄仆,就認(rèn)為是調(diào)用了這個(gè)方法,會(huì)立即執(zhí)行衅斩,這樣一來沿癞,就更別說是傳遞參數(shù)了,那么如果解決這個(gè)問題呢矛渴?
錯(cuò)誤的代碼:
1window.onload =function() {2functionfun(x) {3alert(x);4}5$("#btn").click(fun(5));6}
其實(shí)啊椎扬,如果你以前是這樣寫的,那么就說你對這個(gè)原理還不清楚具温!
click()方法接收的是一個(gè)參數(shù)蚕涤,就像JAVA一個(gè),你完全可以寫一個(gè)方法進(jìn)去铣猩,然后click()得到的參數(shù)就是這個(gè)方法的返回值揖铜。所以,如果想要傳遞一個(gè)方法進(jìn)去达皿,只需要在你調(diào)用的方法那里加上一個(gè)return function(){}就可以了天吓,當(dāng)然這個(gè)方法也是可以帶參數(shù)的。這樣一來峦椰,這個(gè)方法就會(huì)返回一個(gè)方法龄寞。你只需要將你想要的代碼寫在return的方法里面就可以了。
正確的代碼:
1$(document).ready(function() {2functionmethod(a) {3returnfunction() {4fun(a);5}6}7functionfun(num) {8alert(num);9}10function() {11$("btn").click(method(x));12}13});