Let’s look at the following code:
<script>
foo();//execute function foo
function foo()
{
console.log("execute function foo");
}
console.log(a);//undefined
var a=1;
</script>
Can you see the difference?Why they lead to different results?
In fact,function and variable declaration executed during the compilation before runtime.
The code above will execute like this:
<script>
function foo()
{
console.log("execute function foo");
}
var a;
foo();//execute function foo
console.log(a);//undefined
a=1;
</script>
Each declaration will execute first in its own scope before run.
<script>
foo();
function foo()
{
console.log(a);//undefined
var a=1;
}
</script>
However,function expression does not work like function declaration.
<script>
foo();//TypeError: foo is not a function
var foo=function()
{
console.log("foo()");
}
</script>
It likes
<script>
foo();//TypeError: foo is not a function
var foo;
</script>
Tips:If you write more than one same function,the behind covers the front.
<script>
foo();//2
function foo()
{
console.log("1");
}
function foo()
{
console.log("2");
}
</script>
Q:fill in the blanks with the correct answers:
<script>
var foo=function()
{
console.log("1");
}
foo();//①
var foo=function()
{
console.log("2");
}
foo();//②
</script>
<script>
function foo()
{
console.log("1");
}
foo();//③
var foo=function()
{
console.log("2");
}
foo();//④
function foo()
{
console.log("3");
}
foo();//⑤
</script>
A: [1,2,3,2,2].