JavaScript包含的作用域是如何工作的?
例如,假设我的HTML中有以下内容JavaScript包含的作用域是如何工作的?,javascript,Javascript,例如,假设我的HTML中有以下内容 <script src="/socket.io/socket.io.js"></script> 该脚本定义了一个名为socket的变量。下面我有以下内容 <script src="/javascripts/script.js" type="text/javascript"></script> 在script.js中,我尝试访问套接字并得到一个未定义的错误。但是,如果我使用内联脚本,我可以访问变量。如何
<script src="/socket.io/socket.io.js"></script>
该脚本定义了一个名为socket的变量。下面我有以下内容
<script src="/javascripts/script.js" type="text/javascript"></script>
在script.js中,我尝试访问套接字并得到一个未定义的错误。但是,如果我使用内联脚本,我可以访问变量。如何从script.js中访问“socket”?您在哪里定义这些脚本?他们在头牌上吗?如果是这样,您应该能够访问脚本之间的变量…JavaScript本身没有“包含” 在JS文件的顶层声明的任何变量将在加载文件后立即在全局范围内可用,即在使用
标记时
请注意,在
标记上加载了defer
属性的脚本可能不会立即加载,因此其中声明的任何变量都不会立即可用
在回调函数中使用var
关键字声明的变量不会出现在全局范围中。所以在这段代码中:
var a = 1;
$(document).ready(function() {
var b = 1;
});
$(document).ready(function() {
c = 1;
});
a
将在全局范围内,但b
将不在全局范围内
鉴于在本规范中:
var a = 1;
$(document).ready(function() {
var b = 1;
});
$(document).ready(function() {
c = 1;
});
c
将在全局范围内(因为它不是用var
关键字声明的),但直到调用回调函数为止。当套接字脚本尚未加载时,您正试图访问变量。使用$(document).ready()
或其他什么。socket.io.js的代码是什么?如果这是socket.io,它会导出一个名为io
的变量,但不会导出一个名为socket的变量。