1. 程式人生 > 實用技巧 >2021.1.8 - DBUtils - Tomcat - Servlet

2021.1.8 - DBUtils - Tomcat - Servlet

技術標籤:jsjs

基本資料型別(簡單):

null、undefined、boolean、string、number、Symbol
引用資料型別(複雜):
Object

堆和棧的理解:

為了更好的來闡述棧和堆,我們先來了解一下資料型別:
基本型別:String,Number,Boolean,Null,Undefined,這5種基本資料型別它們是直接按值存放的,所以可以直接訪問。
引用型別:Function,Array,Object,當我們需要訪問這三種引用型別的值時,首先得從棧中獲得該物件的地址指標,然後再從堆記憶體中取得所需的資料。

棧(stack):由作業系統自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧;
堆(heap):一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由OS回收,分配方式倒是類似於連結串列。

閉包:

  1. 閉包是指有權訪問另一個函式作用域中的變數的函式,建立閉包的最常見的方式就是在一個函式內建立另一個函式,通過外部函式訪問這個函式的內部的變數。閉包的缺點就是常駐記憶體,會增大記憶體使用量,使用不當很容易造成記憶體洩露。
  2. 不適合場景:返回閉包的函式是個非常大的函式。
    閉包的典型框架應該就是jquery了。
    閉包是javascript語言的一大特點,主要應用閉包場合主要是為了:設計私有的方法和變數。
    這在做框架的時候體現更明顯,有些方法和屬性只是運算邏輯過程中的使用的,不想讓外部修改這些屬性,因此就可以設計一個閉包來只提供方法獲取。
  3. 不必糾結到底怎樣才算閉包,其實你寫的每一個函式都算作閉包,即使是全域性函式,你訪問函式外部的全域性變數時,就是閉包的體現。

解構賦值:

解構賦值是什麼:解構賦值語法是一種 Javascript 表示式。通過解構賦值, 可以將屬性/值從物件/陣列中取出,賦值給其他變數。解構賦值 的特性很強大,它可以幫我們從一堆巢狀很深的物件屬性中,很方便地拿到我們想要的那一個

陣列的解構賦值:
let a, b, rest;
[a, b] = [10, 20];

console.log(a);
// expected output: 10

console.log(b);
// expected output: 20

[a, b, ...rest] = [10, 20, 30, 40, 50];

console.log(rest);
// expected output: Array [30,40,50]

物件的解構賦值:
({ a, b } = { a: 10, b: 20 });
console.log(a); // 10
console.log(b); // 20

({a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40});
console.log(a); // 10
console.log(b); // 20
console.log(rest); // {c: 30, d: 40}

常規用法:
使用解構賦值經常使用到預設值的賦值,和使用 function的預設引數一樣,使用 = 來新增屬性的預設值
let a, b;
[a=5, b=7] = [1];
console.log(a); // 1
console.log(b); // 7

let {a = 10, b = 5} = {a: 3};
console.log(a); // 3
console.log(b); // 

計時器:

setInterval() 每隔一段延遲時間,就會去呼叫回撥函式,會持續的去呼叫
setTimeout()是延遲時間到了之後,就回去回撥函式,只會呼叫1次,就結束這個定時器
setimmediate:在迴圈事件任務完成後馬上執行指定程式碼,和setTimeout差不多

預編譯:

1)建立AO物件(Activation Object)(執行上下文);
2)找函式形參和函式內變數宣告,將形參名和變數名作為AO物件的屬性名,值為undefined;
3)將實參值和形參統一,實參值賦給形參;
4)在函式體裡面找函式宣告,值賦予函式體。

this的指向問題

全域性作用域或者普通函式中this指向全域性物件window(注意定時器裡面的this指向window)
方法呼叫中誰呼叫this指向誰
建構函式中this指向建構函式的例項

call apply bind

call,apply 會自動執行函式,bind不會自動執行需要手動執行
call 方法 傳遞的引數是以引數列表的形式傳遞
apply 傳遞引數是以陣列的形式傳遞

遞迴:

1)宣告一個具名函式,通過函式名呼叫
2)使用arguments.callee代替函式名
3)使用函式表示式

嚴格模式:

嚴格模式,寫在哪個作用域下,在那個作用域生效(儘量不要全域性使用),使用後代碼更加規範、更合理、更安全、更嚴謹。
    "use strict" 
    嚴格模式消除了js語法的一些不合理、不嚴謹之處、減少了怪異行為;消除了程式碼執行的不安全之處;提高編譯器效率,提高執行速度;為未來新版本js做好鋪墊
    用了嚴格模式,程式碼的變化:
    1.全域性變數 必須用var宣告變數
    2.this無法指向全域性物件
    3.函式內重名屬性(形參名字不能相同)
    4.arguments不允許動態修改,在嚴格模式下,argument保證了它的本質功能(arguments只儲存在實際呼叫函式時實際傳入的引數)
    5.新增保留字:impletents interface let package private protected public static yield