1、预编译期:完成对所有变量和函数的声明。
2、执行期:依据代码顺序依次执行代码。由于存在预处理期的变量或者函数声明,因此执行期可以随意调用已经声明过的变量或者函数,不会报错。
对应到上述代码:
1、首先引擎完成f1变量声明,紧接着完成f1方法声明(由于js中不区分变量类型,因此,刚声明的f1变量会被替换成f1方法),然后完成f2方法声明。预编译阶段结束。
2、调用f2方法时,引擎开始执行赋值语句var f1 = "sdfs"和方法调用f2()。这样 预编译期间被声明成方法的f1又重新被赋值成字符串,从而导致调用f1方法报错。
var m = 0var 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++
})