新手提问,关于函数赋值为null 的问题
<script>
function fnTest()
{
alert('aaa');
}
var fnObjRef = fnTest;
fnTest = null;
fnObjRef();
</script>
为什么函数 fnTest 赋值为 null 后, fnObjRef 还可以调用呢?
------解决方案--------------------引用类型。
function fnTest()
{
alert('aaa');
}
函数保存到一个内存区域: ox25845
fnTest 保存函数的内存地址 ox25845。
var fnObjRef = fnTest; 传地址,fnObjRef 和fnTest 的值都是:ox25845
fnTest = null; // fnTest指向空。但是 fnObjRef 还是用了ox25845。内存区域: ox25845始终还存在。
具体 内存区域: ox25845 什么时候会被浏览器回收。不同浏览器机制不一样。去网上搜索吧
------解决方案--------------------函数时引用类型
你可以把引用类型看做路标,通过该路标可以找到目的地
var fnObjRef = fnTest;//表示两个路标指向同一个目的地
fnTest = null;//你把其中一个路标fnTest摘掉了,它没了,但另一个路标fnObjRef仍然存在,fnObjRef仍然指向目的地
------解决方案--------------------<script>
function fnTest()
{
alert('aaa');
}
var fnObjRef = fnTest;//此时的fnObjRef已经成型
fnTest = null; //只是影响fnTest,但是不影响fnObjRef
document.write(fnObjRef+"<br />");
fnObjRef = fnTest;//如果此时再加这句,就会影响
document.write(fnObjRef);
fnObjRef();//此时已经无作用了
</script>
fnTest也就是函数内存地址的指针
如果想让他们都没作用,需要都指向空值