大家都知道,在JS之中,一個變量的生命周期不是以大括號為界限的,所以即使是使用在循環或判斷中的變量,外部也可以使用。可如果我們在循環或變量中使用了方法,而且這個方法使用了循環中的變量,那么后面的代碼是可以修改這個變量的值的,而不是,將值的內容完全寫死在了循環里面的方法中。那么解決這個問題的一種方法就是,將方法寫出來,接收一個參數就可以了。
可是,在JS中傳遞的參數如果是方法,那么后面不能加上小括號,如果加上的話,就認為是調用了這個方法,會立即執行,這樣一來,就更別說是傳遞參數了,那么如果解決這個問題呢?
錯誤的代碼:
1 window.onload = function() { 2 function fun(x) { 3 alert(x); 4 } 5 $("#btn").click(fun(5)); 6 }
其實啊,如果你以前是這樣寫的,那么就說你對這個原理還不清楚!
click()方法接收的是一個參數,就像JAVA一個,你完全可以寫一個方法進去,然后click()得到的參數就是這個方法的返回值。所以,如果想要傳遞一個方法進去,只需要在你調用的方法那里加上一個return function(){}就可以了,當然這個方法也是可以帶參數的。這樣一來,這個方法就會返回一個方法。你只需要將你想要的代碼寫在return的方法里面就可以了。
正確的代碼:
1 $(document).ready(function() { 2 function method(a) { 3 return function() { 4 fun(a); 5 } 6 } 7 function fun(num) { 8 alert(num); 9 } 10 function() { 11 $("btn").click(method(x)); 12 } 13 });