"test"(console.log(1))上面的代码为什么能执行(虽然报错)?
2 回答
![?](http://img1.sycdn.imooc.com/5458632800010f8802200220-100-100.jpg)
有只小跳蛙
TA贡献1824条经验 获得超8个赞
首先,“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),这是因为这里有括号,所以优先处理了,然后其结果作为一个整体作为一个参数用于调用,但发现不能调用,所以报错。
![?](http://img1.sycdn.imooc.com/54584de700017cbd02200220-100-100.jpg)
白猪掌柜的
TA贡献1893条经验 获得超10个赞
添加回答
举报
0/150
提交
取消