(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在此对象的函数之外,我怎么能把它拉掉呢?
答案 0 :(得分:1)
您正在将字符串传递给setTimeout
并对其进行评估。这打破了正常的范围。不要这样做,而是通过功能。
setTimeout(checkHash, 100);
现在范围将被保留,您可以从activate
访问checkHash
,反之亦然,因为它们在同一范围内声明。
答案 1 :(得分:1)
您在setTimeout
中使用字符串参数,这意味着代码将在全局对象中运行。由于您的被调用函数是在另一个函数的闭包内定义的,因此您必须传递一个引用
setTimeout(checkHash, 100);
或使用匿名函数
setTimeout(function(){
checkHash();
});
如果要将任何参数传递给从setTimeout
调用的函数,则必须使用第二种方法。
setTimeout(function(){
checkHash(arg);
});