js的個人初級理解

2021-10-08 05:30:00 字數 3087 閱讀 9592

js的資料型別

基本資料型別

基本資料型別有五個

number 數字

string 字串

布林型別 true和false

null 沒有值

undefined 沒有值

引用資料型別

引用資料型別有兩種

陣列array

函式function

js的全域性變數和區域性變數
首先定義一行**,主要包括宣告和賦值,判斷乙個變數,首先看變數是否有宣告var,如果沒有就一定是全域性變數;如果有var,還要分兩種情況,如果變數定義在函式體裡面,就是函式的區域性變數,如果定義在函式的外面,說明他是乙個全域性變數。

i++和++i的問題
var i=0;

var r1=i++

;var r2=

++i;

他們的含義分別是i++是先賦值再加一,++i是先加一再賦值,這裡的賦值是i的值賦予給r1,而加一是i本身自加一,在第二行**中,r1變為0,而i本身變為1,第三行**是i自身加一後再賦值給r2,r2變為2,i變為2,

注意

這裡的i具有繼承性,即在第二行**執行後,i的值會發生變化,第三行**用的是變化後的i值,並不是第一行**中的i值。

定義變數是否為函式的問題

functionf(

)var a=f(

);a(

);varb

=functiond(

)b()

;<

/script>

對於上面的**,定義的兩個變數分別是a和b,對於a來說,f()函式賦值給a,但是a並不是乙個函式,寫a()會報錯,a is not a function; a拿到的只是f()的值。

對於b來說,他可以當做乙個函式,執行b()會出結果「dd」

我的理解是a只是引用函式,拿到函式返回來的值,b是在定義函式的左邊,定義的時候就把函式賦予給了b,並不是引用函式。

等式的連對
var a = b =2;

var a =

2, b =

2;

第一行表示的結果是

var a =2;

b =2;

第二行表示的結果是

var a =2;

var b =

2;

函式的賦值

var a =12,

b =13,

// und

c =14;

// c = 200

function

fn(a)

b =fn(

);console.

log(a, b, c)

;functionf(

) console.

log(f(

));<

/script>

函式預設的值為undefined,b=fn()為賦值語句,fn()沒有返回值,所以預設為undefined,如果有返回值,就是返回值,不用管返回的是誰的值,只管接收就行。

預編譯階段的提公升
fn(

);functionfn(

)fn()

;functionfn(

)fn()

;varfn=

function()

fn();

functionfn(

)fn()

;functionfn(

)fn()

;// 5 5 5 3 3 3

// 在js中,只要提公升過一次了,就不提公升2次

<

/script>

在預編譯階段,提公升的有帶var的變數和函式,本題中,第六行的變數fn被提公升,當第二行的函式被提公升時發現已經有變數fn了,所以函式的宣告就不提公升,只提公升函式體,這時的fn為當第四行的函式被提公升時,同樣發現已經有fn,也是只提公升函式體,把原來的給頂替。此時的fn為 ,當第六行函式提公升時,對之前的fn並沒有影響正常提公升,下面同理都按此提公升。在預編譯的最後fn為,到此預編譯階段結束;

在執行階段,第一三五行的fn拿到的值都是,到第六行執行**,fn的值會變成,在此fn的值發生變化,往後的fn都是這個值,最終的結果就是 // 5 5 5 3 3 3。

函式的提公升問題

console.

log(g)

;// undg(

);if(

"g"in window)

}// fn是全域性函式 也會掛載到go上

// 在判斷判斷中,如果有函式,此函式在預編譯期間並不會直接

// 提公升到**段的前面,僅僅是提公升了函式名

// 也就是說僅僅是提公升了函式的宣告,也就是提公升了fn

// 如果條件滿足,進入到條件裡面的第1件事就是給fn賦值

// fn 此時就已經是乙個函式了

<

/script>

在預編譯階段,函式在提公升時,如果沒有判斷語句if,函式整體就會提公升到**的最前端,當有判斷語句包裹時,函式只會提公升函式宣告到最前端,函式體不會提公升,在第一行的執行時,因為沒有函式體,就是undefined,函式宣告不是乙個函式 ,可以看做是變數,所以當個g()執行時會報錯,g is not a function。

函式巢狀函式的情況,裡面的函式不會提公升到**的最前端,只會在該函式體的執行上下文中提公升到該函式體的最前端。

型別轉化中其他型別轉化為布林型別
在js中,下面的值轉成false,其它值都轉成true:

0 -0

" "undefiend

null

Js物件導向的個人理解 更新

1 字面量 var obj 2 建構函式 function obj var obj new obj 3 object.creat var o var obj object.create o new建構函式例項化乙個物件 建立乙個object物件並將其 proto 賦值為建構函式的prototype,...

指標的初級理解

本文純屬個人筆記類,大佬可自行跳過 1.1想要了解指標,首先應該知道資料再記憶體中是怎麼儲存的。記憶體分4類 第一類是 區,存放 第二類是全域性區,存放全域性變數,字串常量。第三類是棧區,存放函式裡的變數,棧區很小,一般只有5m到10m。第四類是堆區,記憶體最多,需要自己決定開闢多少記憶體,開闢什麼...

js閉包 closure ,個人理解

一 閉包概念理解 各種專業文獻上對js 閉包 closure 定義非常抽象,賊難看懂。我的理解是,閉包就是能夠讀取某函式內部變數的函式。由於在j ascript語言中只有在函式內部的函式才能讀取區域性變數,因此可以把閉包簡單理解成 定義在乙個函式內部的函式 所以,在本質上,閉包就是將函式內部和函式外...