鍍金池/ 問答/HTML/ javascript代碼 "test"(console.lo

javascript代碼 "test"(console.log(1)) 為什么可以執(zhí)行?

 "test"(console.log(1))

上面的代碼為什么能執(zhí)行(雖然報(bào)錯)?

clipboard.png

回答
編輯回答
醉淸風(fēng)

先執(zhí)行 console.log(1) 獲取值,再調(diào)用 "test"(console.log(1)),由于 "test" 是一個(gè)字符串,不是函數(shù),所以不能用 () 運(yùn)算符,會出錯

2017年6月8日 09:02
編輯回答
兔囡囡

首先,“test”在一定條件下還是可以作為函數(shù)的名稱的,注意這里是指全內(nèi)容,其定義實(shí)際是"\"test\""
比如下面的代碼:

var ttt={
            "\"test\"":function(abc){console.log(2)},
            "tttt":"\"test\""
        }
console.log(ttt["\"test\""]);
ttt["\"test\""](console.log(1));// 第一個(gè)調(diào)用會正常,在控制臺輸出1,2
console.log(ttt["tttt"]);
ttt["tttt"](console.log(3));    // 第二個(gè)調(diào)用會和題主一樣在控制臺輸出3后報(bào)類型錯

此外為什么ttt["tttt"](console.log(3))中會先執(zhí)行console.log(3),這是因?yàn)檫@里有括號,所以優(yōu)先處理了,然后其結(jié)果作為一個(gè)整體作為一個(gè)參數(shù)用于調(diào)用,但發(fā)現(xiàn)不能調(diào)用,所以報(bào)錯。

2017年1月23日 22:06