JavaScript基礎細節

部分與編譯型語言有區別的語法

數據類型

NaN:表示不是數字
undefined:未初始化

表達式:
==:不嚴格的判等 “10” == 10 true
===:嚴格的判等 “10”===10 false
!==
!===

分支結構

switch 語句中 用的是嚴格的判等


數組

聲明方式:

 var array  = new Array();  // 空數組
 var array  = new Array(10);  // 內容爲undefined
 var array  = new array(10,20,30); //number數組
 var array = []; //空數組
 var array = [10,20,30]; //number數組

數組長度可以改變

 var array = []; //聲明一個空數組
 var array[0] = 10; //往裏面添加元素
 var array[1] = 20;
 console.log(array.length) //數組長度改變

函數

  1. 定義
//聲明
function fun(){
}
//參數不需要聲明類型(沒法聲明類型)
function fun(x,y){
}
//如果沒有返回值或return; 則會得到一個undefined
console.log(fun(1,2)); 
  1. arguments對象
    arguments就是參數列表的數組(僞數組)
function fun(){
	//此操作可以顯示傳入的參數長度,即使函數參數列表沒有聲明。
	console.log(arguments.length);
	console.log(arguments);//打印參數列表的值
}
fun(1,2,3);
  1. 命名函數與匿名函數
var fun = function () {
}
這種方式叫函數表達式

普通同名函數,後定義的函數會覆蓋前面的函數,而函數表達式和變量賦值類似。
4. 函數自調用

(function () {
          console.log("aaaa")
})();
  1. 函數作爲參數使用:
 function f1(f2) {
         f2();
         console.log("bbbb");
     }

function f2() {
        console.log("aaaa");
    }
f1(f2);
  1. 函數作爲返回值使用
 function f1() {
        return function () {
            console.log("aaaa");
        }
     }
var ff = f1();

ff();

總結:
函數名的本質就是函數體。
函數的數據類型是function。


JS中的作用域

  1. 兩個script標籤可以使用一個變量
    ** js裏沒有塊級作用域
    只有函數中聲明的吧變量是局部變量,其他任何位置聲明的變量都是全局變量。
<script>
    var num = 1;
</script>
<script>
    alert(num); //1
</script>
  1. 隱式全局變量
function f() {
    num = 10; //不用var聲明.
    delete num;  
}
//可以訪問到函數內的變量,因此此函數不會被釋放內存
console.log(num);

//delete 關鍵字可以刪除隱式全局變量
delete num;
//但無法刪除var聲明的變量

JS中的預解析

js代碼會預先聲明變量,只要變量被聲明,無論變量在什麼位置,解釋器會提前聲明,
函數會調整順序,無論函數體在什麼位置,只要有這個函數,就能被整確調用。

注意

var num = 1;
function f1() {
	  //隱式的var num;
      console.log(num);  //此結果仍然是undefined 因爲js會預解析
      var num = 20;
}
f1();

f1();
var num = 1; //函數會被提前,這個變量的聲明也會提升到變量使用之前
function f1() {
     console.log(num);  //此結果仍然是undefined
}

function f1() {
      console.log(num);  //此結果仍然是undefined
      var num = 1;
}
f1();
console.log(num);  //報錯、提升只會在作用域裏面進行

//多個標籤預解析不衝突(各標籤各玩各的)
<script>
    f1(); //aaaa

    function f() {
        console.log("aaaa"); 
    }
</script>
<script>
    f1(); //bbbb

    function f() {
        console.log("bbbb");
    }
</script>

console.log(a); // a的函數體
function a() {
    console.log("123");
}
var a = 10;
console.log(a); //10;

//提升時,總是變量在前,函數在後進行提升
```
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章