《怪物獵人崛起》耳塞4翔蟲3大錘配裝分享
阿新 • • 發佈:2021-05-14
function
關鍵字可以用來在一個表示式中定義一個函式。
你也可以使用Function
建構函式和一個函式宣告來定義函式。
語法
let function_expression = function [name]([param1[, param2[, ..., paramN]]]) { statements };
引數
name
- 函式名稱。可被省略,此種情況下的函式是匿名函式(anonymous)。 函式名稱只是函式體中的一個本地變數。
paramN
- 被傳遞給函式的一個引數名稱。一個函式至多擁有 255 個引數。
statements
- 構成函式體的語句。
描述
函式表示式(function expression)非常類似於函式宣告(function statement)(詳情檢視函式宣告),並且兩者擁有幾乎相同的語法。函式表示式與函式宣告的最主要區別是函式名稱(function name),在函式表示式中可省略它,從而建立匿名函式(anonymousfunctions)。一個函式表示式可以被用作一個IIFE(Immediately Invoked Function Expression,即時呼叫的函式表示式),它一旦定義就執行。更多資訊請檢視函式。
函式表示式提升 (Function expression hoisting)
JavaScript中的函式表示式沒有提升,不像函式宣告,你在定義函式表示式之前不能使用函式表示式:
notHoisted(); // TypeError: notHoisted is not a function var notHoisted = function() { console.log('bar'); };
命名函式表示式(Named function expression)
如果你想在函式體內部引用當前函式,則需要建立一個命名函式表示式。然後函式名稱將會(且只會)作為函式體(作用域內)的本地變數。這樣也可以避免使用非標準的arguments.callee屬性。
var math = { 'factorial': function factorial(n) {if (n <= 1) return 1; return n * factorial(n - 1); } };
被函式表示式賦值的那個變數會有一個name屬性,如果你把這個變數賦值給另一個變數的話,這個name屬性的值也不會改變。如果函式是一個匿名函式,那name屬性的值就是被賦值的變數的名稱(隱藏值)。如果函式不是匿名的話,那name屬性的值就是這個函式的名稱(顯性值)。這對於箭頭函式也同樣適用(箭頭函式沒有名字,所以你只能賦予name屬性一個隱性名)。
var foo = function() {} foo.name // "foo" var foo2 = foo foo2.name // "foo" var bar = function baz() {} bar.name // "baz" console.log(foo === foo2); //true console.log(typeof baz);// undefined console.log(bar === baz); // false (errors because baz == undefined)
示例
下面的例子定義了一個匿名函式並把它賦值給變數x。這個函式返回它引數的平方:
var x = function(y) { return y * y; };
更多情況下被當作回撥函式使用:
button.addEventListener('click', function(event) { console.log('button is clicked!') })