1、javascript变量提升机制

142 阅读1分钟

不会写东西,有错误请大家帮忙纠正,谢谢!

1.浏览器为了能够让代码自上而下执行,首先会开辟一块内存(栈内存)=>作用域/执行上下文context
2.变量声明(提升)

当浏览器开辟内存后,并木有立刻从上而下执行代码,而是先做了以下操作: 把当前作用域中所有带var/function的关键字进行提前声明和定义=> 变量提升机制

 2.1var的只提前声明(declare),无赋值,默认值undefined2.2function提前声明,且定义(defined),“a=13”定义其实就是赋值,准确来说,就是让变量和某个值进行关联。
console.log(a); //undefined
var a=12;
var b=a;
b=13;
console.log(a); //12
console.log(b); //13
console.log(sum(10.20)); //30
function sum(num1,num2){
    return num1+num2
}

QQ截图20210823111603.png

3.函数表达式和函数声明的区别:

QQ截图20210823111836.png

4.在if判断条件中(全局作用域):
4.1 变量声明一样不管条件是否成功,需要变量提升;
4.2 判断条件下,函数有特殊性,老版本浏览器提前声明或定义;新版本中,为了兼容es6的语法规范,只能提前变量提升,不能提前定义
console.log(fn); //undefined
// fn();  //=>fn is not function;
if('fn' in window){
    fn();  //=>哈哈哈;
    function fn(){
        console.log("哈哈哈");
    }
};
fn(); //哈哈哈
5.在自执行函数本身不进行变量提升(没名字)
自执行函数:前面加() 、!、+、-、~,只有一个目的,符合语法。
6.函数是一等公民