通过document.write包含的外部脚本无法更新全局变量?

时间:2012-09-27 13:39:34

标签: javascript global-variables document.write

我刚做了一些测试,以确定是否可以通过document.write包含的外部脚本更改全局变量。我确实希望这是可能的 - 但它不是!有人对此有解释吗?

调查结果:

通过以下方式更新全局变量:

  • 通过document.write包含的外部脚本将对包含脚本可见
  • 通过document.write包含的
  • 内联脚本对包含脚本
  • 可见

首先完成原始脚本标记 - 然后通过document.write添加的脚本按插入顺序执行。

另一方面,使用javascript执行的结果通过document.write写入的内容以正确的顺序插入(deepth-first) - 但是仍然使用脚本执行时定义的值。

在外部文件的末尾添加警报(x)会导致修改后的值传播回一个和基本上下文。但如果没有用户互动,似乎无法触发这一点。

测试设置

我的测试如下:从base.html的内联脚本我使用document.write包含一个javascript one.js,它本身包含文件two.js.每个文件通过控制台和document.write输出值并设置值。

来自 base.html 的内联脚本片段

var x = "base";
console.log("x at start base: "+x);
document.write("<p>x at start base "+x+"</p>")
document.write('<scr'+'ipt type=\"text/javascript\" src=\"one.js\"></scri'+'pt>');

document.write("<p>x at end base: "+x+"</p>");
console.log("x at end base: "+x);

档案 one.js

console.log("Start One: "+x);
document.write("<p>Start One "+x+"</p>");

x = "1";
document.write('<scr'+'ipt type=\"text/javascript\" src=\"two.js\"></scri'+'pt>');

document.write("<p>End One "+x+"</p>");
console.log("End One: "+x);

档案 two.js

console.log("x at start two.js: "+x);
document.write("x at start two.js: "+x);

x = "2";

document.write("<p>x at end two.js: "+x+"</p>");
console.log("x at end two.js: "+x);

结果

控制台输出:

x at start base: base
x at end base: base

x at start one.js: base
x at end one.js: 1

x at start two.js: 1
x at end two.js: 2

页面输出:显示正确的顺序,但错误的值(文件2中的2个设置.js不支持one.js的结尾和基础js的结尾。

x at start base: base
x at start one.js: base
x at start two.js: 1

x at end two.js: 2
x at end one.js: 1
x at end base: base

先谢谢 Cotopax

0 个答案:

没有答案