this指向問題以及變數提公升問題

2021-10-03 20:25:10 字數 3367 閱讀 4628

非箭頭函式的this指向

箭頭函式的this指向

一、非箭頭函式

1、普通函式作用於window

var name=

'window'

,age=

20function

hello()

hello()

// window , 20

2、函式內的函式 ①、函式內定義了變數

function

obj1()

object1()

}obj1

()

2、函式內的函式 ②、函式內未定義變數

function

obj(

)object()

}obj

()

3、物件內函式

①非箭頭函式指向-----誰呼叫就指向誰,此時obj3呼叫了這個函式所以函式指向物件obj3

var name=

'window'

,age=

20let obj3=

console.

log(

this

.name)

// 物件obj3}}

obj3.

sayname()

//obj3呼叫了sayname這個函式

3、物件內函式

② 箭頭函式指向------箭頭函式沒有this,所以指向外層(就是它繼承父親的this指向,這個地方它的父親是物件obj3,obj3的指向是window,所以函式內指向是window)

var name=

'window'

,age=

10var obj3=

} obj3.

sayname()

//

3、物件內函式

③ 箭頭函式指向------箭頭函式沒有this,所以指向外層

var name=

'window'

,age=

10var obj3=

console.

log(

this

.name+

this

.age)

// 物件obj3 100

}sayname()

}}obj3.

sayhi

()

var name=

'window'

,age=

10var obj3=

sayname()

}}obj3.

sayhi()

//等同於 obj3.sayhi()() 並非是obj3呼叫了他 而是obj3的上級window呼叫了他 所以指向window

4、建構函式的this指向

//建立乙個建構函式

function

person

(name,desc)

//person 的原型物件 saybye

person.prototype.

saybye

=function

saybye()

console.

log(

this

.name+

'-----'

+this

.desc)

// 我是例項-----我是例項的天氣

}var person1=

newperson

('我是例項'

,'我是例項的天氣'

)//構造例項時建立了乙個新的例項物件person1 此時this指向這個新物件

person1.

saybye

()

console.

log(person1)

//

1、函式內未宣告變數時,變數既是全域性變數

var a =

1function

hello1()

hello1

()

2、函式內出現宣告變數時

var a =

1function

hello1()

hello1

()

var a =

1function

hello1()

hello1

()

3、宣告函式

一、

fun();

function fun() //

正確 ,函式宣告可提前呼叫

二、

fun();

var fun = function () //

錯誤 ,未儲存對函式的**,函式呼叫需放在表示式後面

舉個栗子

console.log(c);                     //  undefined

var c =function()

console.log(c) //function(){}

再舉個栗子

console.log(c);                     //  undefined

var c =function()

console.log(c()) // undefined

//此時列印三個值 為什麼列印了三個值呢 請看下乙個栗子

console.log(e)                 //  function e (){}

console.log(e()) // undefined ------------此處console.log(e的返回值), 而e沒有返回值所以返回值預設是undefined ,即console.log(undefined)

// 我是e函式

var e=5;

function e()

console.log(e)

變數提公升以及作用域

1 console.log v1 2var v1 100 3function foo 8foo 9console.log v1 10 undefined undefined 200 100 一共有四次列印的動作,分別來看 第一次列印,由於存在變數提公升,第二句中的var v1 100會被提到頂部進行...

高階js 變數提公升以及自由變數

q首先一道題 if false console.log a undefined 我以為輸出referenceerror aa is not defined 但是實際輸出undefined 因為js沒有塊級作用域,所以最後 就成了這樣 vara if false console.log a 1 let...

js函式以及this指向問題

函式的定義的有三種方式 自定義函式 函式表示式 字面量 以及利用new function的方法。1.1 自定義函式 命名函式 functionfn 1.2 函式表示式 匿名函式,字面量方式 var fun function 1.3 利用new function 引數1 引數2 函式體 執行效率較低 ...