为什么要使用Strict'导致函数未定义

时间:2015-04-30 20:02:07

标签: javascript use-strict

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

起初我认为它与脚本的顺序有关,但经过一些调试后我发现脚本按正确的顺序执行。部分加载通过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调试器并执行&#34; firstScript()&#34;或&#34; secondScript()&#34;抛出同样的错误。

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

1 个答案:

答案 0 :(得分:1)

在阅读巴马尔的评论后挖了一下。部分中包含的所有标记都由jquery's globalEval函数评估,当然使用eval()我的脚本"use strict";,而"use strict";的一个功能是阻止eval() 1}}影响全局范围,这就是我得到未定义函数的原因。