非箭頭函式的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 函式體 執行效率較低 ...