日期:2014-05-16 浏览次数:20361 次
????? 当浏览器解析你的脚本并遇到使用下面这种语法定义的函数时,如:function example(){...}
, example()
函数会在脚本执行之前立即被声明.这意味着你可以在脚本中任何地方调用example(),即使对函数的调用发生在函数的定义之前也没问题. 而对于另外一种语法, 如var example2 = function(){...}, 在脚本执行到该赋值语句之前
example2()函数是不存在的. 如果你在该定义之前调用
example2(), 结果会失败.
????? 注:
浏览器中的解释程序在执行javascript代码之前,首先要对代码进行变量初始化, 即初始化window对象之下的所有顶级变量. 由于第二种定义函数的语法是通过赋值语句实现的,所以在初始化过程中不会被立即声明. 只有在解释器开始执行代码并执行到相应的赋值语句时, 该函数才会被声明. 因此调用该函数的语句只能出现在定义该函数的语句之后. 并且,如果使用第二种语法来定义构造函数, 那么为其prototype属性中添加公共成员的代码,也应该在该函数定义之后.