函数里面的数据都是局部变量,执行完会自动销毁
1. 函数定义
js函数是通过function关键字定义的
2. 函数声明
被声明的函数不会立即执行,它们被“保存以供后来使用”
2.1 自定义函数
function sum(a,b){
//函数体
return a + b;
}
2.2 函数表达式
var x = function fnname(a,b){
return a + b
}
//function后面可以加函数的名字,但是这个名字只能在函数内部使用
2.3 构造器方式
var a = new Function();
3. 函数提升(变量提升)
3.1 什么是提升?
简单的说就是js代码在执行前,引擎会先进行预编译,预编译期间会把变量声明和函数声明提升到其对应作用域的顶端
3.2 变量提升
全局作用域中声明的变量会提升至全局的最高层
函数内声明的变量会提升至函数的最顶层
注意:只提升声明,不会提升变量
//提升前
conole.log(a);
var a = 10;
//提升后
var a;
console.log(a);
a = 10;
//输出:10
3.3 函数提升
直接上图理解
注意:函数提升>变量提升
只提升声明,不提升变量
3.3.1 案例1
var a = true;
foo();
function foo(){
if(a){
var a = 10;
}
console.log(a);
}
//提升后
function foo(){
if(a){
a = 10;
}
console.log(a);//undefined
}
var a;
a = true;
foo();
3.3.2 案例2
//提升前
var a = true;
foo();
var foo = function () {
if (a) {
var a = 10;
}