<script type="text/javascript">
console.log(ftn01);//ftn01() 注意:在firebug下这个打印结果是可以点击,点击后会显示函数的定义
console.log(ftn02);// undefinedfunction ftn01(){
console.log("I am ftn01!");
}
var ftn02 = function(){
console.log("I am ftn02!");
}
</script>
function a()这种方式定义的函数在运行时会自动提升到js文件的最顶端,因此你console时函数a是有定义的。而var定义的变量虽然也会提升到顶端,但不会赋值,而是等代码运行到 ‘=function b()’的那个地方才赋值。你的javascript代码在运行的时候变成了如下的样子:
function ftn01(){
console.log("I am ftn01!");
}
var ftn02;
console.log(ftn01);
console.log(ftn02);
ftn02 = function(){
console.log("I am ftn02!");
}
函数声明提升
使用function 定义的函数会有函数声明提升,也就是可以先使用,再声明
而是用var s=function(){} ,这样变量形式定义的函数,必须先定义再使用,否则会undefined
http://blog.csdn.net/ligang2585116/article/details/52002561
只是匿名函数的问题,你的第一个函数ftn01属于‘传统’意义上的函数,该函数的定义无论是放在什么地方,你都可以立即使用它,因为当你加载该页面时,windows会先将这类函数加载到内存中。而你的ftn02函数,是js中的匿名函数,这类函数需要先定义,然后才能使用,只用当页面执行到该函数时,
windows才会把它加载到内存中,这样以后才能够调用。
是操作系统的制式不同所致!