原理
当浏览器开辟出共代码执行的栈内存后,代码并没有自上而下立即执行,而是继续做了一些事情:把当前做鱼与中的所有带var/function关键字进行了提前声明和定义 =》 变量提升机制
基本数据类型
带var的只是提前声明(declare),没有赋值,默认undefined
console.log(a); //undefined
var a = 12;
var b = a;
b = 13;
console.log(a) //12
引用类型
带function的布景声明,而且还定义了(defined),定义其实就是赋值,准确来说就是让变量和某个值进行关联
1.开辟一个新的没存(堆内存 16进制的内存地址)
2.把美容存储在对内存中(对象存贮的事键值对,函数存储的事函数体中的代码字符串)
3.让变量和地址关联在一起
console.log(sum(10 + 20)); //30
function sum(n, m){
return n + m;
}
console.log(sum1(10 + 20)); //TypeError: sum1 is not a function
var sum1 = function(n, m){
return n + m;
};
console.log(sun(10 + 20)); //30
用函数表达式更严谨