2014-05-07 183 views
0

TypeScript中這兩個變量類型之間的形式區別是什麼?TypeScript:函數類型之間的區別

var randomStringId =() => Math.random().toString(36).substr(2, 9); 
function randomStringId2() { 
    return Math.random().toString(36).substr(2, 9); 
} 

randomStringId有型號() => stringrandomStringId2有型號(): string。他們不一樣嗎?如果是,如何?還是僅僅是我的IDE展示了兩種基本相同的類型?

+1

爲了理解lambda語法:https://www.youtube.com/watch?v=tvocUcbCupA&hd=1 – basarat

+0

你必須要小心,因爲第一個是一個變量保持的功能,並且第二個是一個限定功能本身。 ''randomStringId2''可以在聲明之前使用,而''randomStringId''不能。這是純粹的JavaScript差異,因爲TypeScript是JavaScript的超集,它繼承了這種差異。 –

回答

3

您的功能是相同的。 然而,這兩個功能都不:

var getX =() => this.x 

function getX() { 
    return this.x 
} 

看看生成js代碼:

var _this = this; 
var getX = function() { 
    return _this.x; 
}; 

function getX() { 
    return this.x; 
} 

箭頭符號() =>定義的函數捕獲參考this它被定義時。

1

絕對沒有差異類型。兩者完全相同。他們不收取任何費用並返回一個字符

這裏是證明:

interface Foo1{ 
    foo:()=>string; 
} 
interface Foo2{ 
    foo():string; 
} 
var foo1:Foo1; 
var foo2:Foo2; 
foo1 = foo2 = foo1; 

但是有在他們行爲方式的差異。要了解對lambda函數的需求,請執行以下操作:()=>http://youtube.com/watch?v=tvocUcbCupA&hd=1