1. 程式人生 > 其它 >create Golang project with condition statement

create Golang project with condition statement

技術標籤:專題學習javascript

箭頭函式

箭頭函式是ES6中一種新的函式的表示式,其引數與函式體之間用箭頭連線,因此成為箭頭函式。它也是匿名函式的一種。其基本用法與匿名函式一致,只是略有不同,接下來就講講這不同之處。
其語法為

(引數)=>{
//函式體
}

語法不同

var f=()=>{};
var fn =function(){};

箭頭函式在宣告時不用function關鍵字即可宣告,在只有一個引數並且函式體中只有一行程式碼的情況下可以省略小括號和大括號。

var f= a => return a;

this的指向

this的指向:使用function定義的函式,this的指向隨著呼叫環境的變化而變化,而箭頭函式中的this指向是固定不變的,一直指向定義函式的環境。

//使用function定義的函式
function foo(){
    console.log(this);
}
var obj = { aa: foo };
foo(); //Window
obj.aa() //obj { aa: foo }

在這裡插入圖片描述
foo在全域性作用域中呼叫時,this指向window,foo在obj中呼叫時this指向obj

//使用箭頭函式定義函式
var foo = () => { console.log(this) };
var obj = { aa:foo };
foo(); //Window
obj.aa(); //Window

在這裡插入圖片描述
由於this在全域性作用域中宣告,因此其this始終指向window。

3.變數提升

f();
var f = ()=>{console.log(1)};

在這裡插入圖片描述


var f = ()=>{console.log(1)};
f();

在這裡插入圖片描述

由於js的記憶體機制,function的級別最高,而用箭頭函式定義函式的時候,需要var(let const定義的時候更不必說)關鍵詞,而var所定義的變數不能得到變數提升,故箭頭函式一定要定義於呼叫之前

4.使用bind、call、apply修改this指向無效

var obj = {name:"lihnk"};
var f = ()=>{
console.log(this.name);
}
f.bind(obj); f.call(obj); f.apply(obj);

在這裡插入圖片描述
此時,我們知道,箭頭函式的this指向其定義時的環境外,this的指向不會被改變。

5.沒有arguments

var f = ()=>{
	console.lgo(arguments[0]);
}
f("a");

在這裡插入圖片描述
箭頭函式不能根據實際傳參的數量動態實現功能。

6.不能使用new

var f=()=>{};
var obj = new f();

在這裡插入圖片描述
由此,箭頭函式不能作為建構函式使用。