javascript这里调用f2()时,为什么会报缺少函数。按理说f1,f1()不该会冲突啊

JavaScript019

javascript这里调用f2()时,为什么会报缺少函数。按理说f1,f1()不该会冲突啊,第1张

JS引擎在解释执行js代码的时候分成两个步骤:

1、预编译期:完成对所有变量和函数的声明。

2、执行期:依据代码顺序依次执行代码。由于存在预处理期的变量或者函数声明,因此执行期可以随意调用已经声明过的变量或者函数,不会报错。

对应到上述代码:

1、首先引擎完成f1变量声明,紧接着完成f1方法声明(由于js中不区分变量类型,因此,刚声明的f1变量会被替换成f1方法),然后完成f2方法声明。预编译阶段结束。

2、调用f2方法时,引擎开始执行赋值语句var f1 = "sdfs"和方法调用f2()。这样 预编译期间被声明成方法的f1又重新被赋值成字符串,从而导致调用f1方法报错。

var m = 0

var reportNames = ""

var pf = $("#postData_form")

$('.fxmk').each(function() {

    var n = 0

    $(this).find('.banner_bg .mid').children("div").each(function() {

        var me = $(this)

        var nodetype = me.attr('class')

        if (nodetype == "column_grid") {

            var gridId = me.children("div").attr("id")

            reportNames += m + "|" + n + "|" + gridId + ""

            n++

        } else if (nodetype == "column_char") {

            var chartId = me.children("span").attr("id")

            pf.append("<input id='chartId_forexport|" 

               + m + "|" + n + "' name='" + chartId + "' type='hidden' />")

            n++

        }

    })

    m++

})