相同函数写在同一个script标签和写在不同script标签中有什么不同?

这是写在3个标签的情况,alert出1111

这是写在同一个标签的情况,alert出3333

图片描述

阅读 5k
4 个回答

你这不是写在script标签下的问题。而是写在div中啊.

你在分开的三个script标签的那个情况里,把运行getName()放到最下面,看看是什么情况。


  1. HTML是从上往下依次解析,碰到了script标签就运行。

  2. 所有script标签共享全局作用域。

  3. 所以,无论是写在同一个标签里还是分开写,下面的都会覆盖上面的

  4. 但是由于你的getName()写在了最上面,在分开写的情况中,这时候下面俩函数都还不存在,所以当然就输出1111了。


最后,为啥你要把script标签放到div里面?

html读取是从上往下读取的,一旦一个有错误,就会终止,不再读取下面的代码,所以你的第一个图,当然弹出
1111
而script标签包裹的就是一个区域,一个script标签内的变量或者方法并不会被其它区域所获取

而第二个图,下面的方法把上面的方法给覆盖了,就跟你写css一样,假如说先写background:#ccc;
最后在写一个background:#fff;最终的结果肯定是#fff,所以第二个图会弹出3333

并没有什么不同,只不过受代码执行的先后顺序影响,同名函数后面的会覆盖掉前面的,分开写的时候,函数声明提前,但因为只执行到第一个函数,后面代码还没加载出来,所以是111,执行到后面代码才把前面的覆盖了。
写在一起的,也因为函数声明提前,后面的代码直接覆盖前面的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏