1 function myFunction()
2 {
3 alert("Old");
4 }
alert(myFunction);
5 myFunction(); // 输出 "Old"
6 myFunction=function()
7 {
8 alert("New");
9 };
alert(myFunction);
10 myFunction();myFunction 只是指向某个函数体的一个指针,在第 6 句定义的时候把这个变量重新指向了一个新的函数定义体
2 {
3 alert("Old");
4 }
alert(myFunction);
5 myFunction(); // 输出 "Old"
6 myFunction=function()
7 {
8 alert("New");
9 };
alert(myFunction);
10 myFunction();myFunction 只是指向某个函数体的一个指针,在第 6 句定义的时候把这个变量重新指向了一个新的函数定义体
function myFunction() //第二行
{
alert("Old");
}
var savedFuncion=myFunction;
myFunction=function() //第七行
{
alert("New");
};
myFunction(); // 输出 "New"
savedFuncion(); // 输出 "Old"
</script>还是这个myFunction() 的意思不是调用第2行名为 myFunction的函数吗?不是应该输出“old”吗?为什么是new呢?您说 第七行的 myFunction 是个指针,这个意思我可以理解成 myFunction 是个变量吗?指向function()如果可以这么理解,我不明白您这么回复和我的提问有什么关系呢?对不起,我没能理解,您能耐着性子解释下吗?
function myFunction() //第二行
{
alert("Old");
}
alert("myFunction:\n"+ myFunction); //看看这个变量的内容是什么
var savedFuncion=myFunction;
alert("saveFunction:\n"+ saveFunction) //看看这个赋值以后新的变量里存放着什么内容
myFunction=function() //第七行 //这句代码很清晰呀,就是给 myFunction 变量赋一个新内容
{
alert("New");
};
myFunction(); // 输出 "New" //由于赋了新内容当然就是新的结果
savedFuncion(); // 输出 "Old" // saveFunction 变量里存的还是老的函数体。当然执行的还是老的结果喽。
</script>
function myFunction() //第二行
{
alert("Old");
}
alert("myFunction:\n"+ myFunction); //看看这个变量的内容是什么
var savedFunction=myFunction;
alert("saveFunction:\n"+ savedFunction) //看看这个赋值以后新的变量里存放着什么内容
myFunction=function() //第七行 //这句代码很清晰呀,就是给 myFunction 变量赋一个新内容
{
alert("New");
};
myFunction(); // 输出 "New" //由于赋了新内容当然就是新的结果
savedFunction(); // 输出 "Old" // saveFunction 变量里存的还是老的函数体。当然执行的还是老的结果喽。
</script>
function myFunction()
{
alert("Old");
}
有这样的函数定义之后,
myFunction 和 myFunction() 这两个是不一样的概念,虽然只是添加了一个括号,但第一个是表示 myFunction 这个变量,而后一个则是执行函数型变量 myFunction 所指的函数体。
举一个例子:
<script>
//定义myFunction函数。
function myFunction()
{
alert("Old");
return "New";
}//也可以这样定义,跟上面定义的完全全一样。
var myFunction = function()
{
alert("Old");
return "New";
}//从第二个定义可以很好的理解,说明myFunction是个变量,第一个也好说明,myFunction()是个函数。说白了,在JS里所有的函数都可以这样理解:不加括号就是一个变量,是函数体;不加括号就是执行函数。//执行这样的测试就更清楚了。//执行函数本身
myFunction();//将函数体输出出来。
alert(myFunction);//首先执行函数体,再将函数返回的结果输出出来。
alert(myFunction());
</script>
我们再来看看你提的问题
//定义myFunction函数
function myFunction()
{
alert("Old");
}
//定义变量savedFunciton,同时把myFunction函数体的内容复制给savedFunciton,注意跟C++里函数指针的区别。
var savedFuncion=myFunction;//失明新定义myFunction的内容,跟savedFunction一点关系都没有了。
myFunction=function()
{
alert("New");
};//执行新的myFunction定义,输出"New"
myFunction(); // 输出 "New"//执行保存的savedFunction。所以输入"Old"
savedFuncion(); // 输出 "Old"