2015-12-28 65 views
0

首先登場 - 的n00b的JavaScript在這裏,我也嘗試搜索這代表類似的概念,作爲一個我下面的東西,但如果我的搜索技能我無法找到任何useful..sorry是相當有限的。分配函數變量到另一個功能

我經歷雄辯JavaScript和「嵌套範圍」部分,有展示的功能範圍是如何工作的一些代碼;以下是代碼(以及一些我已經加入到實驗)

var landscape = function() { 
    var result = ""; 
    var flat = function(size) { 
     for (var count = 0; count < size; count++) 
      result += "_"; 
    }; 

    var mountain = function(size) { 
     result += "/"; 
     for (var count = 0; count < size; count++) 
      result += "'"; 
     result += "\\"; 
    }; 


    // my nonsensical code -- begin 

    var myfunc = function(text) { 
     console.log("this is only a block of text -", text); 
    }; 

    // my non sensical code -- end 


    flat(3); 
    mountain(4); 
    flat(6); 
    mountain(1); 
    flat(1); 

    // this is what I was trying to do and see what happens here.. 
    mountain = myfunc("meh"); 
    // end of my nonsense 

    return result; 
}; 
console.log(landscape()); 

我明白,如果我的函數(myfunc)如果我分配一個值result那麼當result在最後一行返回內,它會被改寫爲被分配給它的myfunc

我的問題在這裏,我想任何值是它究竟意味着能夠分配一個函數變量到另一個(mountain = myfunc),是有現實世界的用法到這樣的「功能」?如果沒有,爲什麼Javascript允許這樣的任務?

+2

您並未將功能分配給山區。你的代碼正在調用這個函數,因爲你的函數沒有返回任何東西,它會將undefined存儲到山中。 – epascarello

+0

由於您沒有將函數變量賦值給另一個函數變量,因此您的問題沒有任何意義。也許你從書中錯誤地複製了代碼。 – Barmar

回答

0

這條線:

mountain = myfunc("meh"); 

分配的myfuncmountain返回值。

由於myfunc只記錄東西,它返回undefined(當沒有給出顯式返回值時,它是默認返回值)。

因此,在該示例的末尾,你已經給mountainundefined

但是,當你有函數返回其他值時,這是非常有用的。例如:

function add(a, b) { 
    return a + b; 
} 

function multiply(c, d) { 
    return c * d; 
} 

function divide(e, f) { 
    return e/f; 
} 

var multipliedThing = multiply(add(1,2), add(3,4)); 
var anotherMultipliedThing = multiply(add(5,6), add(7,8)) 

var result = divide(multiplied, anotherMultipliedThing); 
// => 0.12727272727272726 

以上是有點做作,但它示出了用於分配的函數的返回值給變量的使用情況。

函數的核心概念一般是接受一些值並返回一個值。使用JavaScript(以及許多其他語言),您可以獲得帶來副作用(也就是說,在函數之外突變其他值)的函數的「好處」(我將它放在引號中,因爲它在某些情況下有爭議)。因此,如果函數的目的是爲了副作用,你可能不需要返回任何東西。

如果您對一點理論感興趣,請查閱「函數式編程」。

0

這裏:

mountain = myfunc("meh"); 

您呼叫myfunc"meh"作爲參數和返回值賦給mountainfunction記錄文本並結束。由於它沒有return聲明,因此它將返回undefined,因此mountain將在一天結束時保存undefined。如果不是,你這樣做是:

mountain = myfunc; 

然後命名myfunc的功能將被分配到mountain,所以,如果你在這個操作之後調用mountain,它將執行myfunc

我的問題在這裏,我猜是它究竟意味着能夠 一個函數變量分配給另一個(山= MYFUNC),是 有一個真實的世界使用這種「功能」?如果沒有,爲什麼 Javascript允許這樣的任務?

這意味着你可以將函數存儲在變量中。這是一個非常有用的功能,當您最初定義landscapemyfuncmountain時,您正在使用該功能。基本上,function可以有屬性,所以實際上你可以用一個變量來保存function

相關問題