2014-09-05 101 views
0

我正在学习javascript,并希望在我的代码中使用同步javascript调用。同步javascript问题

例如,我有两个脚本script1.js和script2.js。这里是script1.js:

<script> 

var value1="Script 1"; 
alert(value1); 

//calling script2 
url="script2.js" 
document.write("<scr" + "ipt src=\"" + url + "\"></scr" + "ipt>"); 

</script> 

这里是script2.js

<script>  
    var value2="Script 2";  
    </script> 

现在我的问题是我可以从像如果我添加此SCRIPT2打印值(警报(值2);)在我SCRIPT1 .js文件。

<script> 

var value1="Script 1"; 
alert(value1); 

//calling script2 
url="script2.js" 
document.write("<scr" + "ipt src=\"" + url + "\"></scr" + "ipt>"); 
alert(value2); 
</script> 

我已经这样做了使用台异步JS作为

var scr = document.createElement('script'); 
scr.setAttribute('src', url); 
var head = document.getElementsByTagName("head")[0]; 
head.appendChild(scr); 

这是工作,但我想同步实现这一目标有什么建议?

在此先感谢

+1

有人给我-1?为什么我学习javascript可能是很多很简单的问题,但我很困惑,在这一个我只需要解释 – user3754674 2014-09-05 01:41:53

+0

脚本打开标签是'' – Igor 2014-09-05 01:44:30

+0

哦谢谢我更新了这一个。 – user3754674 2014-09-05 01:46:26

回答

0

当添加脚本就像你在第一种情况一样,你可以打开一个新的脚本后,只用从内script2.js值。

的index.html

<script> 
var value1="Script 1"; 
alert(value1); 

//calling script2 
url="script2.js" 
document.write("<scr" + "ipt src='script2.js'></scr" + "ipt>"); 
</script> 
<script> 
alert(value2); 
</script> 

script2.js

var value2='yes'; 

本地检验和验证,它并工作(我看到 '是' 警报),以及你有(全部在相同的脚本标记中)不起作用(抛出异常,因为value2未定义)。

+0

这是什么意思,你可以详细解释一下? – user3754674 2014-09-05 01:51:11

+0

在你使用value2的地方开始一个新的脚本标记,它会起作用 – 2014-09-05 01:52:49

+0

你的意思是添加document.write(“

-1

在JavaScript中,脚本的顺序始终是同步的。因为您在初始化后添加了脚本2,所以您创建了一个如下所示的DOM。

<html> 
    <head> 
     <script> 
     //script 1 
     </script> 
    </head> 
    <body> 
     ---Body content here 
    </body> 
</html> 
<script src="script2.js"/> 

请注意如何将脚本放在页面末尾。因为HTML是同步读取的,所以script1将完成执行(包括alert()(其值为2未定义,因为script2尚未分析),然后处理HTML正文,然后处理script2.js。

如果您希望在当前脚本中间同步加载辅助脚本,则必须执行XMLHTTPRequest并获取内容,然后运行eval(script_2_content)。 Eval将同步编译和解析第二个脚本。

那么你会什么做的是:

<html> 
    <head> 
     <script> 
     //script 1 before loading script 2 
     //script 2 content 
     //script 1 content after loading script 2 
     </script> 
    </head> 
    <body> 
     ---Body content here 
    </body> 
</html> 
+0

为什么downvotes?这是我对HTML解析器如何工作的理解。 – 2014-09-05 03:52:06

-1

听起来像是你想要一个asynchronous function, with a callback。 (第一个答案,正好显示你的例子!)。

基本上,当函数完成加载脚本时,它会调用回调函数,在那里你应该能够运行你的alert(value2);脚本。

否则,如果你想使用文档。写,你有以下选择:

(我认为这个问题是,在你的* .js文件的<script></script>标签,他们并不需要!)

src1.js

document.write('<script src="src2.js"></script'+'>'); 
document.write('<script>alert(value2);</script'+'>'); 

src2.js

var value2 = 'foobar!' 

HTML

<html> 
<body> 
<script src="src1.js"></script> 
</body> 
</html> 

这是否符合您的要求?

+0

我想使用document.write进行内联 – user3754674 2014-09-05 01:55:14