??/*
????????變量的提升:
??????????javascript引擎工作方式是:先解析代碼颠悬,獲取所有被聲明的變量塌西,然后再一行一行的運行蛙紫。
??????????這造成的結(jié)果就是 所有的變量的聲明語句都會被提升到代碼的頭部皂股,這種機制叫做變量的提升劈猪。
??????*/
??????/*
????????變量作用域
??????*/
??????/*
????????一等公民:在js世界中函數(shù)不僅具有傳統(tǒng)函數(shù)的功能(聲明和調(diào)用)還能夠賦值
????????傳參昧甘,返回,這樣的函數(shù)稱為一級函數(shù)或一等公民战得;
??????*/
??????var num = 0;
??????console.log(num);//0
??????var func = function(){ console.log("ahaha") }
??????console.log(func); //? (){ console.log("ahaha") }
??????/*
????????函數(shù)可以直接當(dāng)作另一個函數(shù)的參數(shù)
??????*/
??????function func1(){
????????console.log("我是涼白開啊")
??????}
??????function func2(func){
????????func();
??????}
??????func2(func1);
??????/*
????????函數(shù)名提升:通過function命令聲明的函數(shù)充边,其聲明語句會被提升到代碼頭部
??????*/
/*
????????函數(shù)默認值:用于如果參數(shù)不給值,那么就可以設(shè)置默認值
??????*/
??????function func3(num){
????????(num!=undefined&&num!=null)?num = num : num = 1;
????????console.log(num)
??????}
??????func3(0);//0
??????func3();//1
??????func3(2);//2
//變量提升小例子
??????var a = 0;
??????test();
??????function test(){
????????console.log(a);? ? //undefined
????????var a = 2;
????????console.log(2);? ? //2
??????}
??????/*
????????以上代碼可以變?yōu)?/p>
????????var a
????????function test(){
??????????var a
??????????console.log(a);? ?
??????????a = 2;
??????????console.log(2);? ?
????????}
????????a = 0
????????test()
????????所以第一個輸出undefined, 第二個輸出2
??????*/