这是写在3个标签的情况,alert出1111
这是写在同一个标签的情况,alert出3333
你在分开的三个script
标签的那个情况里,把运行getName()
放到最下面,看看是什么情况。
HTML是从上往下依次解析,碰到了script
标签就运行。
所有script
标签共享全局作用域。
所以,无论是写在同一个标签里还是分开写,下面的都会覆盖上面的
但是由于你的getName()
写在了最上面,在分开写的情况中,这时候下面俩函数都还不存在,所以当然就输出1111
了。
最后,为啥你要把script
标签放到div
里面?
html读取是从上往下读取的,一旦一个有错误,就会终止,不再读取下面的代码,所以你的第一个图,当然弹出
1111
而script标签包裹的就是一个区域,一个script标签内的变量或者方法并不会被其它区域所获取
而第二个图,下面的方法把上面的方法给覆盖了,就跟你写css一样,假如说先写background:#ccc;
最后在写一个background:#fff;最终的结果肯定是#fff,所以第二个图会弹出3333
并没有什么不同,只不过受代码执行的先后顺序影响,同名函数后面的会覆盖掉前面的,分开写的时候,函数声明提前,但因为只执行到第一个函数,后面代码还没加载出来,所以是111,执行到后面代码才把前面的覆盖了。
写在一起的,也因为函数声明提前,后面的代码直接覆盖前面的。
10 回答11k 阅读
6 回答2.9k 阅读
5 回答4.7k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
你这不是写在script标签下的问题。而是写在div中啊.