素材牛VIP会员
javascript代码 "test"(console.log(1)) 为什么可以执行?
 无***圣  分类:JavaScript  人气:862  回帖:2  发布于6年前 收藏
 "test"(console.log(1))

上面的代码为什么能执行(虽然报错)?

 标签:javascript

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv5 码农
Ca***on 职业无 6年前#1

先执行 console.log(1) 获取值,再调用 "test"(console.log(1)),由于 "test" 是一个字符串,不是函数,所以不能用 () 运算符,会出错

Lv2 入门
请***丶 Linux系统工程师 6年前#2

首先,“test”在一定条件下还是可以作为函数的名称的,注意这里是指全内容,其定义实际是"\"test\""
比如下面的代码:

var ttt={
            "\"test\"":function(abc){console.log(2)},
            "tttt":"\"test\""
        }
console.log(ttt["\"test\""]);
ttt["\"test\""](console.log(1));// 第一个调用会正常,在控制台输出1,2
console.log(ttt["tttt"]);
ttt["tttt"](console.log(3));    // 第二个调用会和题主一样在控制台输出3后报类型错

此外为什么ttt["tttt"](console.log(3))中会先执行console.log(3),这是因为这里有括号,所以优先处理了,然后其结果作为一个整体作为一个参数用于调用,但发现不能调用,所以报错。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取