为了账号安全,请及时绑定邮箱和手机立即绑定

javascript代码 "test"(console.log(1)) 为什么可以执行?

javascript代码 "test"(console.log(1)) 为什么可以执行?

慕姐4208626 2019-02-28 18:14:18
 "test"(console.log(1))上面的代码为什么能执行(虽然报错)?
查看完整描述

2 回答

?
有只小跳蛙

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),这是因为这里有括号,所以优先处理了,然后其结果作为一个整体作为一个参数用于调用,但发现不能调用,所以报错。


查看完整回答
反对 回复 2019-03-02
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

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


查看完整回答
反对 回复 2019-03-02
  • 2 回答
  • 0 关注
  • 634 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信