在声明函数之前调用它

时间:2014-07-21 17:17:42

标签: javascript

我的文件顶部附近有一些代码,如下所示:

var my12proddate = JSON.parse(sessionStorage.getItem('my12prodDate'));
var mytstprod = my12proddate[0];
if (mytstprod == null) {
    myupdatedproddate();
}

代码中的下一步是:

var num = size;

function myupdatedproddate() {          
    for (var a = 0; a < num; a++) {
        var dt = new Date(startmothnyear);
        dt.setMonth(dt.getMonth() - a);
        var newww = dt.toString()
        var monthNum = months[newww.substring(4, 7).toLowerCase()];
        var yearNum = newww.substring(24, 28);
        var monthandyearNum = monthNum + "/" + yearNum;
        monthsupdated[a] = monthandyearNum;

    }
}

当我运行此脚本时,它会给我myupdatedproddate is undefined错误。

为什么我收到此错误?

3 个答案:

答案 0 :(得分:3)

在正常情况下,这没关系,因为您正在使用函数声明。这有效,例如:

foo();

function foo() {
    console.log("Hi there");
}

函数声明在进入作用域时处理,在执行任何逐步执行代码之前,只要它们位于相同的代码编译单元中(在浏览器上,这是一个script元素)。

因此,如果它不起作用,则告诉我们该函数在与其调用的代码不同的范围中声明,或者在不同的代码编译单元中声明。

这失败了,例如:

foo();

$(document).ready(function() {   
    function foo() {
        console.log("Hi there");
    }
});

...因为foo包含在我们给ready的函数中,所以它不存在于它之外,我们无法调用它。

同样,这也失败了:

<script>
    foo();
</script>
<script>
    function foo() {
        console.log("Hi there");
    }
</script>

...因为声明在我们尝试使用它的之后的代码编译单元中,所以当我们尝试使用它时它还不存在。

因此,您需要查看声明函数的位置以及使用它的位置,并确保只在实际可以看到它的位置使用它。

答案 1 :(得分:0)

我认为你会发现如果你在其下面添加缺少的分号,那么你应该说的其他内容是否正常。

var num = size;

    function myupdatedproddate() {          
        for (var a = 0; a < num; a++) {
            var dt = new Date(startmothnyear);
            dt.setMonth(dt.getMonth() - a);
            var newww = dt.toString(); // <--- add this here
            var monthNum = months[newww.substring(4, 7).toLowerCase()];
            var yearNum = newww.substring(24, 28);
            var monthandyearNum = monthNum + "/" + yearNum;
            monthsupdated[a] = monthandyearNum;

        }
    }

答案 2 :(得分:-1)

我刚注意到我不再需要在我的js文件中使用此代码

var my12proddate = JSON.parse(sessionStorage.getItem('my12prodDate'));

我评论出来并且有效。

感谢您的努力..