我在測驗中看到了這段代碼,我對JavaScript相當陌生。雖然我知道這個函數是如何工作的,但任何人都可以向我解釋第三行代碼。 什麼該日誌:函數(){}表示:什麼是日誌:function(){}在JavaScript中?
var abc = function() {
return {
log : function() {
console.log(this.val);
}
};
}
我在測驗中看到了這段代碼,我對JavaScript相當陌生。雖然我知道這個函數是如何工作的,但任何人都可以向我解釋第三行代碼。 什麼該日誌:函數(){}表示:什麼是日誌:function(){}在JavaScript中?
var abc = function() {
return {
log : function() {
console.log(this.val);
}
};
}
它是一個對象屬性,其值是一個函數。如果你這樣做:
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();
謝謝,我對此有一個跟進問題。上述功能如何與以下功能不同: var abc = function(){ return { log:()=> { \t console.log(this.val); } }; } –
@ peggy.go查看https://stackoverflow.com/questions/34361379/arrow-function-vs-function-declaration-expressions-are-they-equivalent-exch – Barmar
這將返回一個對象作爲{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書。
這是一個物體的key
,它的value
是一個函數。
日誌由外部函數(其被分配給變量ABC)返回的對象的唯一字段初始化爲函數體旁邊。
爲了更好地幫助你瞭解它,我會結構的僞代碼中給出的代碼
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。
編碼快樂,
法魯克
你的「匿名函數」實際上是一個函數聲明沒有名稱,這是一個語法錯誤(函數聲明必須有一個名稱)。匿名函數由函數表達式構成,其中省略了可選名稱。關於「*通常使用匿名函數,你不能稱它們爲*」,這會使它們變得毫無用處。它們通常是立即調用的(立即調用的函數表達式或IIFE)或分配給變量,參數,屬性等,以便稍後調用它們。 – RobG
@RobG感謝您的澄清:D – faroukcharkas
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();
log由於外部函數(分配給abc)返回的對象的唯一字段被初始化爲其旁邊的函數體。 – tibetty