2017-08-15 40 views
0

我在測驗中看到了這段代碼,我對JavaScript相當陌生。雖然我知道這個函數是如何工作的,但任何人都可以向我解釋第三行代碼。 什麼該日誌:函數(){}表示:什麼是日誌:function(){}在JavaScript中?

var abc = function() { 
    return { 
     log : function() { 
     console.log(this.val); 
     } 
    }; 
} 
+1

log由於外部函數(分配給abc)返回的對象的唯一字段被初始化爲其旁邊的函數體。 – tibetty

回答

2

它是一個對象屬性,其值是一個函數。如果你這樣做:

var x = abc(); 

你可以再做:

​​

調用的函數。這裏有一個完整的例子:

var abc = function() { 
 
    return { 
 
     log : function() { 
 
     console.log(this.val); 
 
     } 
 
    }; 
 
} 
 

 
var x = abc(); 
 
x.val = "This is the value"; 
 
var y = abc(); 
 
y.val = "This is y's value"; 
 
x.log(); 
 
y.log();

+0

謝謝,我對此有一個跟進問題。上述功能如何與以下功能不同: var abc = function(){ return { log:()=> { \t console.log(this.val); } }; } –

+0

@ peggy.go查看https://stackoverflow.com/questions/34361379/arrow-function-vs-function-declaration-expressions-are-they-equivalent-exch – Barmar

0

這將返回一個對象作爲{log: function()}。這是一個普通的JS對象,看起來像{key:value}。在這裏閱讀更多關於JS對象的信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

我假設問題是關於this解決的問題。你可以在這裏閱讀:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/this。更好的是,我可以推薦你從'你不知道JS'系列的凱爾辛普森的this & Object prototypes書。

0

這是一個物體的key,它的value是一個函數。

0

日誌由外部函數(其被分配給變量ABC)返回的對象的唯一字段初始化爲函數體旁邊。

0

爲了更好地幫助你瞭解它,我會結構的僞代碼中給出的代碼

OBJECT abc IS A FUNCTION THAT DOES 
    RETURN ANONYMOUS OBJECT 
     LOG TO CONSOLE this.val 

讓我們來看看函數的聲明,你是最熟悉的。

function myFunction() { 
    //do stuff 
} 

在給出的例子中,你被示出匿名函數。在上面的例子中,函數聲明瞭一個名字,它的名字是myFunction。但是對於匿名函數,在聲明時不需要給出名字。所以在基礎上,功能沒有名稱,使其匿名。

函數的要點是避免重複的代碼。所以賦予函數一個名字可以讓你從任何地方給它們打電話。使用匿名函數,除非將它們分配給一個變量,否則不能調用它們。

通常在分組代碼時使用匿名函數。代碼組是用於event listener還是用於其他事情。

您可以瞭解更多關於匿名功能的信息here

另外在這個例子中是匿名對象。您可能對提供對象名稱很熟悉。但return返回的是一個匿名對象。匿名對象內是我們即將看到的內容。

對象結構類似於此:

objectName 
    key1: value1 
    key2: value2 
在這種情況下

因此,匿名對象return正在恢復有一個名爲log關鍵。此密鑰的值是一個匿名函數,它將this.val記錄到控制檯。

您可以瞭解更多關於對象here

編碼快樂,

法魯克

+0

你的「匿名函數」實際上是一個函數聲明沒有名稱,這是一個語法錯誤(函數聲明必須有一個名稱)。匿名函數由函數表達式構成,其中省略了可選名稱。關於「*通常使用匿名函數,你不能稱它們爲*」,這會使它們變得毫無用處。它們通常是立即調用的(立即調用的函數表達式或IIFE)或分配給變量,參數,屬性等,以便稍後調用它們。 – RobG

+0

@RobG感謝您的澄清:D – faroukcharkas

0

abc()返回一個普通對象,其中,屬性和值可以在對象進行設定。在對象this的函數內會引用對象實例。我們可以設置的this.val到一個值,然後調用abc()對象.log()方法

var abc = function() { 
 
    return { 
 
     log : function() { 
 
     console.log(this.val); 
 
     } 
 
    }; 
 
} 
 

 
var def = abc(); 
 

 
def.val = 123; 
 

 
def.log();

this.val也可以在abc()呼叫通過定義默認參數設定的值

var abc = function(val = 123) { 
 
    return { 
 
     log : function() { 
 
     console.log(this.val); 
 
     }, 
 
     val 
 
    }; 
 
} 
 

 
var def = abc(); // optionally pass parameters to `abc()` call 
 

 
def.log();

相關問題