1

我有一个正在加载两个脚本的部分。第二个脚本调用第一个脚本中的一个函数......两个脚本都使用“use strict;” 在顶部。当第二个脚本调用第一个脚本中的函数时,我得到一个“未捕获的 ReferenceError函数名称未定义”。

起初我认为这与脚本的顺序有关,但经过一些调试后,我发现脚本以正确的顺序执行。部分通过 jquery 异步调用加载,并仅附加到当前视图。此外,我可以在 chrome 的调试器中调用第一个脚本的函数,直到第二个文件被加载。

我有点发疯了,把所有的东西都砍掉了,它还在发生。这就是我正在使用的...

脚本 1

"use strict";

var firstScript = function () {
    alert("first");
};

脚本 2

"use strict";

var secondScript = function () {
    alert("second");
};

阿贾克斯调用

$.ajax({
    type: "post",
    url: "/../SomeController/SomeAction",
    success: function (content) {
        $("#someDiv").html(content);
    }
});

部分的

<script src="~/Some/Folder/Js/Script1.js"></script>
<script src="~/Some/Folder/Js/Script2.js"></script>

页面加载后,我打开 chrome 调试器并执行“firstScript()”或“secondScript()”会引发相同的错误。

但是,如果我取出use strict;两个文件,它们都可以工作。这里到底发生了什么?

4

1 回答 1

2

阅读 Barmar 的评论后,挖得更深一些。部分中包含的任何标签都由jquery 的 globalEval函数评估,该函数当然使用eval()我的脚本"use strict";,其中一个功能"use strict";是防止eval()影响全局范围,这就是我得到未定义函数的原因。

于 2015-04-30T20:54:57.283 回答