[英]Why doesn't setTimeout recognize function name?
(function( $ ){
$.fn.hash = function(){
function activate()
{
setTimeout('checkHash()', 100);
}
activate();
var previousHashTag = location.hash;
var previousHashProperty = '';
function checkHash()
{
if( previousHashTag !== location.hash )
{
$('body').trigger("hashchange", [ getHashObj() ]);
previousHashTag = location.hash;
setTimeout( "checkHash()", 200);
}
setTimeout( "checkHash()", 100);
}
這是我要制作的哈希插件。 當用戶加載插件時,我想調用activate()函數。 activate函數將設置一個超時,以每100毫秒檢查一次哈希。 由於checkHash在此對象的函數之外,我該如何實現?
您正在將字符串傳遞給setTimeout
並對其進行評估。 這打破了正常范圍。 不要這樣做,而是傳遞函數。
setTimeout(checkHash, 100);
現在將保留作用域,並且您可以從checkHash
訪問activate
,反之亦然,因為它們在同一作用域中聲明。
您在setTimeout
中使用字符串參數,這意味着代碼將在全局對象中運行。 由於您的調用函數是在另一個函數的閉包中定義的,因此您必須傳遞一個引用
setTimeout(checkHash, 100);
或使用匿名功能
setTimeout(function(){
checkHash();
});
要將任何參數傳遞給從setTimeout
調用的函數時,必須使用第二種方法。
setTimeout(function(){
checkHash(arg);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.