<!-- 1.js
function print() {
console.log(a)
}
-->
<script src="./1.js"></script>
<script>
console.log('body', a) // 报错
</script>
<!-- 2.js~~~~
let a = 1
function b() {
console.log(a)
print() // 输出 1
}
b() // 输出 1
-->
<script src="./2.js"></script>
代码如上,我的问题是为什么定义在后面的(2.js)的变量a
能在1.js中使用,而同样是在2.js之前的script
标签中使用a
就会报错,显然script
标签使用src
引入和不使用src
是不同的,但是什么原因导致的,为什么会这样?
其次我在1.js中输出了window
对象,发现属性中有2.js中的b
函数,但是直接调用window.b
却会报错,提示不存在这个属性,这又是为什么?
使用不使用src是一样的,只不过把代码分片段,但是是外部链接js脚本导致前面的script无法使用后面script定义的变量或者方法
定义在2.js里的a能在1中使用是因为print执行延后了,你直接在1中执行print,a也是未定义也会抛出ReferenceError
1.js中window对象中含有b方法是因为对象是索引数据,你点击扩展的时候b已经被加到window对象中了。但是你提前使用的时候还没有b这个方法,所以就报错了,undefined不能直接当方法执行