15、JavaScript 声明提升和var

内存是一次分配,并且一次分配之后就无法再修改了。在预编译时内存空间已经被分配好了

预编译:在所有代码运行之前,(计算机)将代码从头到尾看一遍,将这个程序需要运行的空间一次性分配好。

声明提升

声明提升:在当前作用域,声明变量和函数,会直接提升在代码最前面运行。
变量声明提升:

console.log(num)
var num=10

 
拿这个例子说:当计算机扫描到var num=10时,发现需要开辟一段名为num的空间,这是系统就会为他开一个空间。这样就相当于把变量声明提到了最前面

类似于这样:
var num;
console.log(num)
 num=10;

之前我们说过,如果变量声明时,没有初始化,那么系统默认会往这个变量空间里放入undefined的值。也就出现了运行的结果。

函数提升:

fn()
function fn(){
   

    console.log(1)
}

 
仅在当前作用域进行函数提升。

fn()
function fn(){


    console.log(num)
    var num=10
}
console.log(num)

 

省略var声明变量

作用:变量会被强制声明成全局变量。

注:不建议,属于语法错误

function fn(){


    var num=10;
    num2=20
}
fn()
console.log(num2)
console.log(num)

 
如果函数不被调用,那么函数内的变量仅仅只是在函数内作为变量有一个变量空间,此时计算机并未认为num2变成全局变量。

function fn(){


    var num=10;
    num2=20
}
console.log(num2)
console.log(num)