在某些情況下,傳遞函數(shù)名之后,接收的不是函數(shù)而是函數(shù)名的字符串類型;
解決方法:
1. eval
eval方法—用來(lái)執(zhí)行字符串代表的 javascript 代碼。
如果傳遞的不是字符串的話,會(huì)直接返回傳值,而非調(diào)用。
例如:
function test(str){
alert(str);
}
//如果param是值;
eval('test("param")');
//如果param是變量;
var param = 'B';
eval('test(param)'); //會(huì)查找名為param的變量,如果找不到會(huì)拋出異常
2. 把方法名看成屬性名就行了
由于eval 效率低下以及不安全性,正常情況下我們并不會(huì)直接使用這種方法來(lái)調(diào)用一個(gè)函數(shù)。由于函數(shù)在javascript 里面可以被保存在對(duì)象中,因此通過(guò)對(duì)象的屬性訪問(wèn)將會(huì)是更好的選擇。
說(shuō)明:
- 全局函數(shù)聲明會(huì)變成全局對(duì)象的屬性。
全局對(duì)象是在進(jìn)入執(zhí)行上下文前創(chuàng)建的一個(gè)唯一的對(duì)象。
在瀏覽器運(yùn)行環(huán)境中,全局對(duì)象就是window對(duì)象。- 屬性訪問(wèn)可以使用 點(diǎn)標(biāo)記法 或者 括號(hào)標(biāo)記法 ,其中,使用點(diǎn)訪問(wèn)時(shí)需要使用標(biāo)識(shí)符,而使用括號(hào)訪問(wèn)時(shí)使用的是標(biāo)識(shí)符對(duì)應(yīng)的字符串。
例如:
function test(str) {
alert(str);
}
window['test']('param'); //直接執(zhí)行
window['test'].call(this,'param');//如果需要修改函數(shù)運(yùn)行時(shí)的this
如果函數(shù)是其他對(duì)象的屬性,也是同理調(diào)用。