如何為 setTimeout() 方法傳參


現有如下JavaScript代碼:

function printApple(apple){

  console.log(apple, "is a kind of healthy fruit");

}

var apple = "apple";

setTimeout("printApple(apple)", 5000);

則在執行setTimeout時,會報 apple is not defined,那么應該如何傳參數呢?

1、 匿名函數

setTimeout(function(){

  console.log(apple, "is a kind of healthy fruit");

}, 5000);

2、Function.prototype.bind()

setTimeout(printApple.bind(null, apple), 5000);

3、第三個參數作為 setTimeout() 內部函數的參數,其實setTimeout()可以接受多個參數:setTimeout(yourFunctionReference, 5000, param1, param2, paramN);

var apple = "apple";

setTimeout(printApple, 5000, apple);

由於IE10以前的版本,不支持為setTimeout()和setInterval()方法傳遞第三個參數,所以在IE10以前的版本使用時,要添加以下代碼:

if (document.all && !window.setTimeout.isPolyfill) { var __nativeST__ = window.setTimeout; window.setTimeout = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */) { var aArgs = Array.prototype.slice.call(arguments, 2); return __nativeST__(vCallback instanceof Function ? function () { vCallback.apply(null, aArgs); } : vCallback, nDelay); }; window.setTimeout.isPolyfill = true; } if (document.all && !window.setInterval.isPolyfill) { var __nativeSI__ = window.setInterval; window.setInterval = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */) { var aArgs = Array.prototype.slice.call(arguments, 2); return __nativeSI__(vCallback instanceof Function ? function () { vCallback.apply(null, aArgs); } : vCallback, nDelay); }; window.setInterval.isPolyfill = true; }

Any anonymous function will change "this" to point to window, so you will lose your object reference.

 

 

 


免責聲明!

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



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