javascript常见的两种创建function的方法是:
function testFunc(a){
alert(a);
}
另外一种
var testFunc=function(a){
alert(a);
}
对于第一种方式,当为创建全局执行环境而进行变量实例化时,会根据上面的函数声明创建相应的函数对象。
第二种方式,在全局执行环境的变量实例化过程中,会先为全局对象创建一个命名属性。而在计算赋值语句之前,暂时不会创建函数对象,也不会将该函数对象的引用指定给全局对象的命名属性。但是,最终还是会在全局执行环境中创建这个函数对象。
我们来看个例子来理解他们的不同
先看第一个例子:
testFunc('test');
function testFunc(a){
alert(a);
}
在这种情况下,alert会执行,虽然函数定义在使用这个函数的代码之后,但是由于在创建全局执行环境的时候就会创建这个function,所以执行的时候是有效的,我们接着看这种情况
testFunc('test');
function testFunc(a){
alert(a);
}
这种情况下,不会alert出’test’如果你有使用firebug等调试工具的话,会报错,提示testFunc不是个function。接着看:说明在执行 testFunc(‘test’)的时候,testFunc这个函数还被有被创建。
var testFunc=function(a){
alert(a);
}
testFunc('test');
这种情况下,也会alert出’test’ 因为最终这个function还是会被创建,只是创建的时间和第一种函数创建方法不同而已。
