假设我有以下脚本,名为include_strict.js
。执行后我应该有window.global1
定义:
"use strict";
var globalVar = {};
alert(typeof window.globalVar);
但是如果我将它从 javascript 块中包含进来
$.getScript("include_strict.js");
警报说undefined
。为什么?这里发生了什么?
仅供参考,如果我使用脚本标记包含该文件,则不会发生这种情况:
<script type="text/javascript" src="include_strict.js"></script>
在这里,我看到了预期的警报,object
。如果我删除"use strict";
,那么两者jQuery.getScript()
and <script>;
具有相同的显示效果object
.
我创建了一个例子(https://docs.google.com/file/d/0B-XXu97sL1Ckb0x0OHptTmVMY00/edit)来证明这一点。
It uses $.getScript()
它使用eval
在严格模式下执行不能修改全局作用域的脚本:
Second, eval
严格模式代码不会将新变量引入周围范围。在普通代码中eval("var x;")
将变量 x 引入周围函数或全局范围。这意味着,一般来说,在包含 eval 调用的函数中,每个不引用参数或局部变量的名称都必须在运行时映射到特定定义(因为 eval 可能引入了一个新变量,该变量将隐藏外部变量) )。在严格模式下, eval 仅为正在评估的代码创建变量,因此 eval 不会影响名称是否引用外部变量或某些局部变量:
Source: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode
解决方案不是使用 jQuery 加载脚本,而是附加一个script
元素到 DOM。请注意,您甚至不能使用 jQuery 来附加元素;它会自动使用$.getScript()
for it.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)