扫码关注官方订阅号
hello1 hello2
首先是不太明白1中的赋值。其次1中为什么会执行test()函数,而2和3都不执行?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
1中test显式调用了。。。
2、3当然不行。
你得看jssdk中保存的是什么。
jssdk[test] = test();
以上代码会在jssdk中生成一个属性,这个属性的key是function test(){↵ alert('hello');↵ },注意这是个字符串,value是test()的返回值,也就是undefined,最终保存的结果是:
function test(){↵ alert('hello');↵ }
test()
undefined
jssdk["function test(){↵ alert('hello');↵ }"] = undefined;
为什么呢?因为jssdk是个Object,它的key必须是string类型,上面那段代码用一个动态变量jssdk[test]来保存,那就会对test做一个类型转换,因为test是个function,所以会调用test.toString(),结果是个字符串function test(){↵ alert('hello');↵ }。
jssdk[test]
test.toString()
如果你把1改成jssdk[test] = test(注意没有括号),那第二个就应该可以执行(当然第二个还得改成函数调用),但是第三个怎么搞都没法执行,因为jssdk中压根没有test这个成员函数。
jssdk[test] = test
jssdk[test] = test;//1应该怎样写 你那样写是说test这个函数运行的结果给jssdk[test] 看test出来的应该是undefined所以点击动作也没什么反应了
函数名后加了参数括号(),函数会被执行。反过来说要执行函数你得加()。所以你1的位置赋值的是test函数的执行结果,而不是test函数本身。你要想在2/3位置执行test函数,赋值应该写成:
()
test
jssdk["test"]=test;
楼下说的对,jssdk[test]就错了。给Object用[]加属性一定要注意[]里面是不是要加引号……这错我天天犯
[]
以及2的位置应该是jssdk["test"](),3在上面的写法下才能写成jssdk.test()
jssdk["test"]()
jssdk.test()
jssdk["test"]=test() 是把test()运行结果赋值给jssdk的test属性吧,而test()运行结果是undefined
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
1中test显式调用了。。。
2、3当然不行。
你得看jssdk中保存的是什么。
以上代码会在jssdk中生成一个属性,这个属性的key是
function test(){↵ alert('hello');↵ },注意这是个字符串,value是test()的返回值,也就是undefined,最终保存的结果是:为什么呢?因为jssdk是个Object,它的key必须是string类型,上面那段代码用一个动态变量
jssdk[test]来保存,那就会对test做一个类型转换,因为test是个function,所以会调用test.toString(),结果是个字符串function test(){↵ alert('hello');↵ }。如果你把1改成
jssdk[test] = test(注意没有括号),那第二个就应该可以执行(当然第二个还得改成函数调用),但是第三个怎么搞都没法执行,因为jssdk中压根没有test这个成员函数。jssdk[test] = test;//1应该怎样写
你那样写是说test这个函数运行的结果给jssdk[test]
看test出来的应该是undefined所以点击动作也没什么反应了
函数名后加了参数括号
(),函数会被执行。反过来说要执行函数你得加()。所以你1的位置赋值的是
test函数的执行结果,而不是test函数本身。你要想在2/3位置执行
test函数,赋值应该写成:楼下说的对,
jssdk[test]就错了。给Object用[]加属性一定要注意[]里面是不是要加引号……这错我天天犯以及2的位置应该是
jssdk["test"](),3在上面的写法下才能写成jssdk.test()jssdk["test"]=test() 是把test()运行结果赋值给jssdk的test属性吧,而test()运行结果是undefined