JavaScript Fonksiyon Tanımı

JavaScript fonksiyonları function kelimetanımlamatarafından tanımlanabilir.

fonksiyon kullanabilirsiniz声明veya fonksiyonİfade

fonksiyon beyanı

Bu derste daha önce, aşağıdaki gramerle声明fonksiyon:

function fonksiyonAdı(parametreler) {
   Çalıştırılacak kod
}

Tanesi tanımlanan fonksiyonlar doğrudan çalıştırılmaz. Onlar "daha sonra kullanılmak üzere saklanır" ve daha sonra, çağrıldıklarında çalıştırılır.

Örnek

function myFunction(a, b) {
     return a * b;
}

Kişisel olarak deneyin

noktalı virgül, çalışılabilir JavaScript ifadelerini ayırmak için kullanılır.

Fonksiyon声明çalışılabilir bir ifade değildir ve noktalı virgülle sonlandırılmak yaygın değildir.

fonksiyon ifadeleri

JavaScript fonksiyonlarıİfadetanımlanabilir.

Fonksiyon ifadeleri değişkende saklanabilir:

Örnek

var x = function (a, b) {return a * b};

Kişisel olarak deneyin

Fonksiyon ifadesini değişkende sakladıktan sonra, bu değişken fonksiyon olarak kullanılabilir:

Örnek

var x = function (a, b) {return a * b};
var z = x(4, 3);

Kişisel olarak deneyin

上面的函数实际上是一个Adlandırılmamış fonksiyon(没有名称的函数)。

Değişkende saklanan fonksiyonlar fonksiyon adına ihtiyaç duymazlar. Onlar her zaman değişken adı ile çağrılır.

Yukarıdaki fonksiyon noktalı virgülle sonlandırıldı çünkü o, bir çalışılabilir ifadenin bir parçasıdır.

Function() yapıcı fonksiyonu ile tanımlanır.

Önceki örneklerinde gördüğünüz gibi, JavaScript fonksiyonları function kelime tanımları ile tanımlanabilir.

Fonksiyonlar, adlandırılmış Function() 的内建 JavaScript 函数构造器来定义。

Örnek

var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);

Kişisel olarak deneyin

您实际上无需使用函数构造器。上面的例子这么写也是一样的:

Örnek

var myFunction = function (a, b) {return a * b};
var x = myFunction(4, 3);

Kişisel olarak deneyin

大多数情况下,您可以避免在 JavaScript 中使用 new 关键词。

函数提升

在本教程中稍早前,您已经学到了“提升”(hoisting)。

Hoisting 是 JavaScript 将声明移动到当前作用域顶端的默认行为。

Hoisting 应用于变量声明和函数声明。

正因如此,JavaScript 函数能够在声明之前被调用:

myFunction(5);
 function myFunction(y) {
     return y * y;
}

使用表达式定义的函数不会被提升。

自调用函数

函数表达式可以作为“自调用”。

自调用表达式是自动被调用(开始)的,在不进行调用的情况下。

函数表达式会自动执行,假如表达式后面跟着 ()

您无法对函数声明进行自调用。

您需要在函数周围添加括号,以指示它是一个函数表达式:

Örnek

(function () {
    var x = "Hello!!";      // 我会调用我自己
}();

Kişisel olarak deneyin

上面的函数实际上是一个匿名的自调用函数(没有名称的函数)。

函数可用作值

JavaScript 函数可被用作值:

Örnek

function myFunction(a, b) {
    return a * b;
}
var x = myFunction(4, 3);

Kişisel olarak deneyin

JavaScript 函数可用在表达式中:

Örnek

function myFunction(a, b) {
    return a * b;
}
var x = myFunction(4, 3) * 2;

Kişisel olarak deneyin

函数是对象

JavaScript 中的 typeof 运算符会为函数返回 "function"。

但是最好是把 JavaScript 函数描述为对象。

JavaScript 函数都有属性方法

arguments.length 会返回函数被调用时收到的参数数目:

Örnek

function myFunction(a, b) {
    return arguments.length;
}

Kişisel olarak deneyin

toString() 方法以字符串返回函数:

Örnek

function myFunction(a, b) {
    return a * b;
}
var txt = myFunction.toString();

Kişisel olarak deneyin

Nesne özellikleri olarak tanımlanan fonksiyonlar, nesne yöntemleri olarak adlandırılır.

Yeni nesneler oluşturmak için tasarlanmış fonksiyonlar, nesne yapıcı fonksiyonları (nesne yapıcı) olarak adlandırılır.

Açılma Fonksiyonları

Açılma fonksiyonları, fonksiyon ifadelerini kısa bir dilbilgisi ile yazmayı sağlar.

function anahtar kelimesi, return anahtar kelimesi ve parantezler gerekmez.

Örnek

// ES5
var x = function(x, y) {
  return x * y;
}
// ES6
const x = (x, y) => x * y;

Kişisel olarak deneyin

Açılma fonksiyonları kendi this'lerini içermemektedir. Bu nedenle, nesne yöntemleri olarak tanımlanmaz.

Açılma fonksiyonları yükseltilmemiştir. Kullanılmadan önce tanımlanmaları gerekmektedir.

const kullanmak var kullanmakten daha güvenlidir, çünkü fonksiyon ifadeleri her zaman sabit değerlerdir.

Eğer fonksiyon tek bir ifade ise, sadece return anahtar kelimesi ve parantezleri atlanabilir. Bu nedenle, onları tutmak iyi bir alışkanlık olabilir:

Örnek

const x = (x, y) => { return x * y };

Kişisel olarak deneyin

IE11 veya daha eski sürümler açılma fonksiyonlarını desteklemez.