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

Why does console.log stop errors in javascript Library?

本文关键字:错误 javascript console log 为什么      更新时间:2024-02-26

我一直在为我正在开发的web应用程序创建一个小库。在创建这个库时,我可以在脚本顶部输入一条日志语句,下面的一切都很好。但是,如果删除top 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!');
        }
    })();
});

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

现在,我想你看到了问题:
问题不在于删除顶部的console.log,而在于不再忽略use strict

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

ReferenceError: assignment to undeclared variable TestFirst

意味着您需要在varTestFirst = define_TestFirst();

中添加var语句

正如错误所说,您没有用var声明TestFirst,而是为其赋值(或使用window.TestFirst = ...):

TestFirst = define_TestFirst();

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

来自MDN:

要为整个脚本调用严格模式,请输入"严格使用";(或"使用strict";)在任何其他语句之前。