指標的指向
我們能夠在一個函數建立之後重新分配它,但是我們需要指向函數對象本身,而不是指向它的指標。在下例中,我將改變myfunction()的內容。
Example 6:
CODE:
function myFunction()
{
alert("Old");
}
myFunction(); // 輸出 "Old"
myFunction=function()
{
alert("New");
};
myFunction(); // 輸出 "New"
舊函數哪裡去了??被拋棄了。
如果我們需要保留它,我們可以在改變它之前給它分配一個指標。
Example 6A:
CODE:
function myFunction()
{
alert("Old");
}
var savedFuncion=myFunction;
myFunction=function()
{
alert("New");
};
myFunction(); // 輸出 "New"
savedFuncion(); // 輸出 "Old"
不過要小心,象下面這樣的例子並不會有作用,因為是建立了另一個叫做myFunctionPtr的函數而不是修改它。
Example 6B:
CODE:
function myFunction()
{
alert("Old");
}
var savedFunc=myFunction;
savedFunc=function()
{
alert("New");
};
myFunction(); // 輸出 "Old"
savedFunc(); // 輸出 "New"
內嵌函數
我們還能夠在一個函數中嵌套一個函數。下例,我有一個叫做getHalfOf的函數,而在它裡面,我有另一個叫做calculate的函數。
Example 7
CODE:
function getHalfOf(num1, num2, num3)
{
function calculate(number)
{
return number/2;
}
var result="";
result+=calculate(num1)+" ";
result+=calculate(num2)+" ";
result+=calculate(num3);
}
var resultString=getHalfOf(10,20,30);
alert(resultString); // 輸出 "5 10 15"
你只能在內部調用嵌套的函數。就是說,你不能這麼調用:getHalfOf.calculate(10),因為calculate只有當外部函數(getHalfOf())在啟動並執行時候才會存在。這和我們前面的討論一致(函數會被編譯,但只有當你去調用它的時候才會執行)。