Javascript 两个外部文件之间的变量
Javascript variable between two external files
我是 JS 新手,我不明白为什么这不起作用。以下内容在名为 test1.js
的文件中
var greeting;
function randomGreeting(){
var greet = new Array("BORING JS TEST ALERT", "EXCITING JS TEST ALERT", "AWESOME JS TEST ALERT");
var randGreet = Math.floor(Math.random() * greet.length);
greeting = {
alert: greet[randGreet]
};
}
在单独的 test2.js
文件中:
alert(greeting.alert);
在我的 HTML 中,我在正文 onLoad
中调用了 randomGreeting()
,并且我在 test2.js
之前加载了 test1.js
,但我仍然得到undefined
当 test2 为 运行 时来自控制台。为什么?
使用立即调用函数:
您可以将 randomGreeting() 包装在一个立即调用函数代码块中,以便在它被声明后立即执行,这样您的代码就可以工作了:
var greeting;
(function randomGreeting(){
var greet = new Array("BORING JS TEST ALERT", "EXCITING JS TEST ALERT", "AWESOME JS TEST ALERT");
var randGreet = Math.floor(Math.random() * greet.length);
greeting = {
alert: greet[randGreet]
};
})();
在单独的 test2.js 文件中:
alert(greeting.alert);
您有针对 test2.js 运行 的竞争条件和稍后触发的文档加载事件。
您要么将警报延迟到设置变量
(function(){
if (typeof greeting == "undefined")
return window.setTimeout(arguments.callee, 10);
alert(greeting.alert);
}());
如果你不记得 randomGreeting,你可以直接内联它
var greet = new Array("BORING JS TEST ALERT", "EXCITING JS TEST ALERT", "AWESOME JS TEST ALERT");
var randGreet = Math.floor(Math.random() * greet.length);
var greeting = {
alert: greet[randGreet]
};
或者您可以更改脚本以使用 defer 属性
<script scr="test1.js"></script>
<script scr="test2.js" defer></script>
<script>
window.onload = function(){
alert(greeting.alert);
};
</script>
我是 JS 新手,我不明白为什么这不起作用。以下内容在名为 test1.js
var greeting;
function randomGreeting(){
var greet = new Array("BORING JS TEST ALERT", "EXCITING JS TEST ALERT", "AWESOME JS TEST ALERT");
var randGreet = Math.floor(Math.random() * greet.length);
greeting = {
alert: greet[randGreet]
};
}
在单独的 test2.js
文件中:
alert(greeting.alert);
在我的 HTML 中,我在正文 onLoad
中调用了 randomGreeting()
,并且我在 test2.js
之前加载了 test1.js
,但我仍然得到undefined
当 test2 为 运行 时来自控制台。为什么?
使用立即调用函数:
您可以将 randomGreeting() 包装在一个立即调用函数代码块中,以便在它被声明后立即执行,这样您的代码就可以工作了:
var greeting;
(function randomGreeting(){
var greet = new Array("BORING JS TEST ALERT", "EXCITING JS TEST ALERT", "AWESOME JS TEST ALERT");
var randGreet = Math.floor(Math.random() * greet.length);
greeting = {
alert: greet[randGreet]
};
})();
在单独的 test2.js 文件中:
alert(greeting.alert);
您有针对 test2.js 运行 的竞争条件和稍后触发的文档加载事件。
您要么将警报延迟到设置变量
(function(){
if (typeof greeting == "undefined")
return window.setTimeout(arguments.callee, 10);
alert(greeting.alert);
}());
如果你不记得 randomGreeting,你可以直接内联它
var greet = new Array("BORING JS TEST ALERT", "EXCITING JS TEST ALERT", "AWESOME JS TEST ALERT");
var randGreet = Math.floor(Math.random() * greet.length);
var greeting = {
alert: greet[randGreet]
};
或者您可以更改脚本以使用 defer 属性
<script scr="test1.js"></script>
<script scr="test2.js" defer></script>
<script>
window.onload = function(){
alert(greeting.alert);
};
</script>