js 把字符串當(dāng)函數(shù)執(zhí)行的方法

在某些情況下,傳遞函數(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ō)明:

  1. 全局函數(shù)聲明會(huì)變成全局對(duì)象的屬性。
    全局對(duì)象是在進(jìn)入執(zhí)行上下文前創(chuàng)建的一個(gè)唯一的對(duì)象。
    在瀏覽器運(yùn)行環(huán)境中,全局對(duì)象就是window對(duì)象。
  2. 屬性訪問(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)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容