JS複習4 繼續深入

2021-10-04 19:00:58 字數 1782 閱讀 2110

;var person2 =

;

person1.fullname.

call

(person2)

;//返回john doe

//就是讓函式在指定物件上呼叫,this在呼叫的時候發生繫結,指向person2

c.關於this,分享乙個我以前做過的挺有意思的乙個題,:

//下面這段js程式的執行結果是什麼

var user =

}var func = user.getcount;

console.

log(

func()

;

我先將結果告訴你,是undefined,給你5分鐘思考。

好了,我來解答:

我上面說過,this只有在函式呼叫的才會發生繫結,誰呼叫的繫結誰。那麼是誰呼叫的這個函式呢?其實題目繞了乙個彎子,它宣告了乙個變數接收user物件的物件方法getcount,很明顯func是乙個函式型別的變數,這個變數是在哪兒宣告的呢?顯而易見,函式外部,在函式外部宣告的變數是什麼?是全域性變數,全域性變數是屬於哪個物件的?預設是屬於window物件的,所以下面函式的呼叫func(),就等同於window.func(),這樣的話,this肯定就繫結window物件了。然後我們看裡面執行的**,this.count就等同於執行window.count,這樣乙個語句就相當於是宣告了乙個變數但是沒有賦值,這樣的變數列印出來肯定就是undefined,如果裡面this,就是執行return count,這就相當於直接使用乙個沒有宣告的變數,程式肯定就會報錯了

如果window.count沒有懂,不妨看看下面這個例子:

var person =

person.age =10;

//js中是支援這樣給乙個物件新增乙個屬性的,這句話就是宣告新增乙個屬性並賦值

person.***;

//這就相當於宣告了乙個屬性不賦值

console.

log(person.***)

//undefined

//window物件是乙個js預先已經定義好的物件,這下懂了吧

js let和const

a.let宣告的變數擁有塊級作用域({}內)

b.const宣告乙個唯讀的常量,一旦宣告,常量的值就不能改變,同樣也是塊級作用域

c.var宣告的變數不具備塊級作用域,在塊內重新宣告變數也會重新宣告塊外的變數,let不會

var x =10;

//x最終輸出2

var y =10;

;//y最終輸出10

d.在函式體內(外)使用var和let關鍵字宣告的變數類似,作用域都輸區域性(全域性)的

html**中使用全域性變數:

使用var關鍵字宣告的全域性作用域變數屬於window物件

使用let關鍵字宣告的全域性作用域變數不屬於window物件

e. var存在變數提公升(hoisting),支援先使用後宣告,let不行

f. const宣告的變數必須初始化

g. const的本質:const定義的常量並非真正的常量,並非不可變,它定義了乙個常量引用值。使用const定義的物件或者陣列,其實是可變的,從這裡我們可以得出:const宣告的變數不能改變的是它的位址引用,而這個位址上的內容我們是可以修改的。比如:

const car =

;car.color =

'red'

;//這個改變時允許的,而且是可以奏效的

//car = ; //陣列是一樣的,不寫了,能偷懶就偷懶

h. const不存在變數提公升

複習 JS基礎

以下算是經典的入門演算法吧,還記得第一次接觸時,感覺難得要命,現在來看,也不過如此!1 如果今天是星期六,那麼1000天後是星期幾?用一條語句計算出來。var a 1000 7 6 7 alert a 2 使用者輸入乙個三位數,用程式計算三位數字的和。比如 使用者輸入155,就彈出11 使用者輸入3...

JS高階 複習

每個例項物件中都有乙個屬性 proto 是原型,瀏覽器使用的,不標準的屬性 每個建構函式中都有乙個屬性prototype,是原型,程式設計師使用的 物件導向和面向過程都是程式設計思想 物件導向注重的是結果,面向過程注重的是過程 物件導向的特性 封裝,繼承,多型 1.通過原型實現繼承,改變原型的指向,...

JS高階 複習

面向過程和物件導向都是程式設計的思想,方式不一樣 面向過程 凡事都是親力親為,所有的 都要自己寫,每一步都要很清楚,注重的是過程 物件導向 執行者成為指揮者,只要找物件,然後讓物件做相關的事情,注重的是結果 物件導向的特性 封裝,繼承,多型 封裝 就是 的封裝,把一些特徵和行為封裝在物件中 物件導向...