[英]Javascript defining functions
我一直在和可汗學院學習Javascript。 我在看: http : //www.khanacademy.org/cs/speed-circles/964929070
有一行顯示“var draw = function(){...}”是否定義了一個名為draw的函數? 或者是變量繪制調用一些函數(我沒有看到定義)?
謝謝!
是的,函數表達式被分配給名為draw
的變量。 你甚至可以打電話給它:
var draw = function() {
console.log('xyz');
};
draw(); // 'xyz'
在JavaScript中,函數是對象,就像數組和邏輯對象一樣。 正如您可能已經發現的那樣,這些對象可以分配給多個變量,但只要您更改其中一個變量,它們就會發生變化。 那是因為JS總是按值分配,但是變量永遠不會直接賦予對象:它被賦予對象的引用 :
var obj = {iam: 'an object'};
var reassign = obj;
console.log(obj);//shows object
console.log(reassign);//surprize, shows the same thing
reassign.bar = 'foobar';
console.log(obj.bar);//logs foobar, the variable obj has gained the same property, because it is the same object.
這同樣適用於函數,作為對象,可以在整個地方分配給變量/屬性,但它仍然是相同的對象/函數:
var foo = function()
{
console.log('I am an object');
};
var second = foo;
second();//logs I am an object
console.log(second === foo);//logs true, because they both reference the same thing
那么,為什么你可能會問一個匿名函數被分配給一個變量,而不是像你期望的那樣只聲明一個函數? 好:
function foo(){}
懸掛 ,運行任何代碼之前,JS將所有函數的聲明和變量聲明范圍內的極頂,但在你的情況,你不能簡單地定義一個函數,或者聲明一個變量:JS有做一些事情, too:分配對變量的引用。 該功能不會被懸掛:
var foo = function()
{
console.log('foo');
};
foo();//logs foo
foo = function()
{
console.log('bar');
};
foo();//logs bar now
如果在分配之前未定義foo,則會出現錯誤。 如果在上面的代碼之前有任何代碼,JS 會提升foo的變量聲明,但它的值仍然是未定義的。
重點是什么? 當你開始玩閉包時,或者你需要函數不同時,這將證明是有用的,這取決於一個分支( if (x){ foo = functionX} else { foo = functionY;}
)。 這只是你想要避免范圍提升的兩個原因......但是所有ATM的最重要原因必須是動態地重新定義功能
function draw(){return“Sample”; };
var draw = function(){return“Sample”; };
是一樣的意思。
function () { ... }
創建一個函數值。 也就是說,可以像javascript中的數字或任何其他對象一樣輕松傳遞。
然后,他將其綁定到名稱繪制以供將來參考。
他也可以寫
function draw() {
...
}
出於這些目的,它們是等效的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.