为什么console.log会在javascript库中停止错误?

时间:2015-02-22 08:06:27

标签: javascript

我一直在努力为我正在开发的网络应用创建一个小型库。在创建这个库时,我可以在脚本的顶部输入一个日志语句,下面的所有内容都可以正常工作。但是,如果我删除顶部console.log语句,我会收到错误。代码如下。错误是:

ReferenceError: assignment to undeclared variable TestFirst

代码:

$(document).ready(function() {
    (function() {
        console.log('starting');
        'use strict';
        function define_TestFirst()  {
            function TestFirst () {};
            return TestFirst;
        }

        if (typeof(TestFirst) === 'undefined') {
            console.log('defined');
            TestFirst = define_TestFirst();
            TestFirst.prototype.test = function () {
                console.log('TestFirst object created.');
            }
        } else {
            console.log('TestFirst library already defined!');
        }
    })();
});

2 个答案:

答案 0 :(得分:2)

问题是"use strict"必须是您的函数的第一个语句才能被使用。否则就会被忽略。

现在,我猜你看到了问题:
问题不在于移除顶部console.log,而是关于use strict不再被忽略。

脚本在严格模式下运行的问题是必须首先声明任何变量:

ReferenceError: assignment to undeclared variable TestFirst

表示您需要在 var var

添加TestFirst = define_TestFirst();语句

答案 1 :(得分:0)

如错误所示,您没有使用TestFirst声明 var,但为其指定了值(或使用window.TestFirst = ...):

TestFirst = define_TestFirst();

您需要严格模式,但在console.log()之前使用use strict会导致use strict无法启用严格模式。

From MDN:

  

要为整个脚本调用严格模式,请输入确切的语句   “严格使用”; (或'使用严格';)在任何其他陈述之前。