日期:2014-05-16 浏览次数:20468 次
<html> <head> <script lang="javascript"> function say() { alert("a"); } function exe(f) { alert(f); f(); } window.onload=exe(say); </script> </head> <body> </body> </html>
Function.prototype.toString = function(){return 123;} function say() { alert("a"); } function exe(f) { alert(typeof f); // function alert(f); // 返回function的toString,默认就是该表达式's 字符串 f(); } window.onload=exe(say);
------解决方案--------------------
个人理解吧,
JS在引用的时候,是引用类型。也就是
function exe(f)
{
alert(f);
f();
}
这个代码被调用的时候f只是一个引用参数,它存储的是say函数的地址值。这个没错,但是JS没有像C++一样强类型,还有指针这个语法。JS只有引用传参,你非要理解的话你可以理解成是C++中的函数指针 也就是这里的f 是一个指针,并非是一个地址引用。
另外这里的alert(f),意思是吧f这个指针头string后打印出来,所以是打印出该指针指向的对象实体也就是这里的say函数本身。。。
有点乱希望你能理解