Javascript 为什么是';使用严格的';导致函数未定义

Javascript 为什么是';使用严格的';导致函数未定义,javascript,use-strict,Javascript,Use Strict,我有一个部分正在加载两个脚本。第二个脚本调用第一个脚本中的函数。。。两个脚本的顶部都使用“use strict;”。当第二个脚本调用第一个脚本中的函数时,我得到一个“uncaughtreferenceerror函数名未定义” 起初我认为这与脚本的顺序有关,但经过一些调试后,我发现脚本的执行顺序是正确的。部分内容通过jquery异步调用加载,并附加到当前视图中。此外,我可以在chrome的调试器中调用第一个脚本的函数,直到加载第二个文件为止 我有点疯了,把所有的东西都删掉了,现在还在发生。这是我的

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

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

我有点疯了,把所有的东西都删掉了,现在还在发生。这是我的工作内容

脚本1

"use strict";

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

"use strict";

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

$.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()”会抛出相同的错误


但是,如果我拿出
使用strict
在两个文件上都有效。这到底是怎么回事?

在阅读了巴尔马的评论后,我们进一步挖掘了一下。分部中包含的任何标记都是由函数计算的,函数当然使用
eval()
我的脚本使用
的“use strict”
的一个特性“使用严格”
是为了防止
eval()
影响全局范围,这就是为什么我得到了未定义的函数。

这些脚本文件真的是完整的内容吗?它们的顺序正确吗?例如,在包含之前是否调用
secondScript
?我将它与asp.net一起使用以获取实际的content@Pointy是的,我实际上是从我的文件中复制并粘贴了该部分:|@EBrown现在我甚至没有在脚本中调用它。我只是触发这个加载脚本的事件,然后尝试从chrome的调试器控制台调用它。比如,如果我使用“use script”,函数就不属于全局函数列表的一部分,但是我找不到任何关于“use script”的东西可以阻止这种情况发生。同样,如果我删除两个文件中的“使用脚本”,效果会很好