函数
函数的声明:
第一种声明方式:
function 函数名(){
函数体
}
另一种表达方式:
var 函数名=function(){
函数体
}
调用函数
两种方式都可以使用,不过还是有一定的区别,当出现如下情况时
例1:
f1();//调用函数
function f1(){
console.log("hhhh");
}//作用域
运用第一种声明,输出结果为hhhh
f1();//调用函数
var f1=function(){
console.log("hhh");
}//作用域
运用第二种,输出结果时会报错,出现这种情况,是因为先调用了函数,意思就是把函数的声明提升到了作用域的前面,但只会提升声明,不会调用,简而言之就是预解析
预解析
1,意指把声明了的变量提升到了作用域的前面,但不会赋值
2,函数的声明提升到作用域的最前面,不会提升调用(例1)
3,先提升var,再提升function
例2:
var a = 25; //声明了全局变量a=25
function abc (){ //运用函数function
alert(a);
var a = 10;
}
abc(); //调用函数abc()
最后输出的结果为undefined
//以下就是javascript的执行过程
var a;
function abc (){
alert(a);
var a
a = 10;
}
a = 25;
abc();
因为在alert()前,只声明了a,但并没有给a赋值
作用域
在例2 中,就有两个作用域
0级作用域有 a=25 abc
1级作用域有 a=10
例3:
function f1() {
var num = 123;
function f2() {
console.log( num );
}
f2();
}
var num = 456;
f1();
这种情况,输出结果为123
先访问最高的作用域,f2,但是f2里没有sum值,再访问 num=123,得出结果