mxx*_*xxk 5 jquery global-variables use-strict getscript
假设我有以下脚本,叫做include_strict.js.执行后我应该window.global1定义:
"use strict";
var globalVar = {};
alert(typeof window.globalVar);
Run Code Online (Sandbox Code Playgroud)
但是,如果我从一个javascript块包含它
$.getScript("include_strict.js");
Run Code Online (Sandbox Code Playgroud)
警报说undefined.为什么?这里发生了什么?
仅供参考,如果我使用脚本标记包含文件,那就不会发生这种情况:
<script type="text/javascript" src="include_strict.js"></script>
Run Code Online (Sandbox Code Playgroud)
在这里,我看到了预期的警报object.如果我删除"use strict";,那么这两个jQuery.getScript()和<script>;具有显示同样的效果object.
我已经创建了一个示例(https://docs.google.com/file/d/0B-XXu97sL1Ckb0x0OHptTmVMY00/edit)来演示这一点.
Thi*_*ter 11
它使用$.getScript()哪些用于eval执行脚本,该脚本无法在严格模式下修改全局范围:
其次,
eval严格模式代码不会将新变量引入周围范围.在普通代码中,eval("var x;")将变量x引入周围函数或全局范围.这意味着,通常,在包含对eval的调用的函数中,每个不引用参数或局部变量的名称都必须在运行时映射到特定的定义(因为该eval可能引入了一个隐藏外部变量的新变量).在严格模式下,eval仅为正在评估的代码创建变量,因此eval不会影响名称是指外部变量还是某个局部变量:
资料来源:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode
解决方案不是使用jQuery加载脚本,而是将一个script元素附加到DOM.请注意,您甚至无法使用jQuery追加元素; 它会自动$.getScript()用于它.