一、函数的创建
1、函数表达式
<script>
let sum = function (num1,num2){
console.log(num1+num2);
};
sum(1,2); //输出 3
</script>
以上代码定义了变量sum并将其初始化为一个函数,通过变量名sum即可以调用该函数。
2、函数声明
function sum (num1,num2){
console.log(num1+num2);
}
sum(2,3);//输出5
二、函数声明与函数表达式的区别
我们知道JavaScript是解释性语言,函数执行时,有这三个步骤:
1、语法分析
2、预编译
3、逐行执行
而事实上,解析器会率先读取函数声明,并使其在执行任何代码之前可以访问,而表达式,则必须等到解析器执行到它所在的代码行,才会真正解释执行。
function test(num1,num2){
console.log(num1); //function num1(){}
console.log(num2); //undefined
var num2 =234;
console.log(num2); //234
num1 = 123;
console.log(num1); //123
function num1(){}
var num1;
num2 =125;
var num2 = function(){}
console.log(num1); //123
console.log(num2); //function(){}
}
test(1);
这里重点要说明的是函数的预编译过程,主要分为以下四步:
1、创建AO对象(Activity Object)(执行期上下文)
2、找形参和变量声明,将变量和形参名作为AO属性名,值作为undefined
3、将实参的值赋给形参
4、在函数体里找函数声明,值赋给函数体
在函数执行的前一刻,生成一个AO对象,并开始按照以上步骤生成AO对象的属性,在执行 console.log(num1)时的AO对象为:
AO{
num1:function num1(){},
num2:undefined
}
执行console.log(num1); console.log(num2);后分别输出function num1(){} 、 undefined;接着往下执行,AO对象属性随着发生改变,执行完最后的语句时,AO对象为:
AO{
num1:123,
num2:function(){}
}