Bu eğitimde, örnekler yardımıyla JavaScript ok işlevi hakkında bilgi edineceksiniz.
Ok işlevi, JavaScript'in ES6 sürümünde sunulan özelliklerden biridir. Normal işlevlere kıyasla daha temiz bir şekilde işlevler oluşturmanıza olanak tanır. Örneğin,
Bu işlev
// function expression let x = function(x, y) ( return x * y; )
olarak yazılabilir
// using arrow functions let x = (x, y) => x * y;
bir ok işlevi kullanarak.
Ok Fonksiyonu Sözdizimi
Ok işlevinin sözdizimi şöyledir:
let myFunction = (arg1, arg2,… argN) => ( statement(s) )
Buraya,
myFunction
işlevin adıdırarg1, arg2,… argN
fonksiyon bağımsız değişkenleridirstatement(s)
işlev gövdesi
Gövdenin tek bir ifadesi veya ifadesi varsa, ok işlevini şu şekilde yazabilirsiniz:
let myFunction = (arg1, arg2,… argN) => expression
Örnek 1: Bağımsız Değişken İçermeyen Ok İşlevi
Bir işlev herhangi bir argüman almıyorsa, boş parantezler kullanmalısınız. Örneğin,
let greet = () => console.log('Hello'); greet(); // Hello
Örnek 2: Tek Bağımsız Değişkenli Ok Fonksiyonu
Bir işlevin yalnızca bir bağımsız değişkeni varsa, parantezleri atlayabilirsiniz. Örneğin,
let greet = x => console.log(x); greet('Hello'); // Hello
Örnek 3: İfade Olarak Ok Fonksiyonu
Ayrıca dinamik olarak bir işlev oluşturabilir ve bunu bir ifade olarak kullanabilirsiniz. Örneğin,
let age = 5; let welcome = (age console.log('Baby') : () => console.log('Adult'); welcome(); // Baby
Örnek 4: Çok Satırlı Ok İşlevleri
Bir işlev gövdesinde birden çok deyim varsa, bunları küme parantezlerinin içine koymanız gerekir ()
. Örneğin,
let sum = (a, b) => ( let result = a + b; return result; ) let result1 = sum(5,7); console.log(result1); // 12
Ok Fonksiyonu ile bunu
Normal bir işlevin içinde, bu anahtar sözcük çağrıldığı işlevi ifade eder.
Ancak this
ok işlevleriyle ilişkili değildir. Ok işlevinin kendine ait bir özelliği yoktur this
. Yani her aradığınızda this
, ana kapsamını ifade eder. Örneğin,
Normal bir işlevin içinde
function Person() ( this.name = 'Jack', this.age = 25, this.sayName = function () ( // this is accessible console.log(this.age); function innerFunc() ( // this refers to the global object console.log(this.age); console.log(this); ) innerFunc(); ) ) let x = new Person(); x.sayName();
Çıktı
25 tanımsız Pencere ()
Burada, this.age
içeriye this.sayName()
erişilebilir çünkü this.sayName()
bir nesnenin yöntemi.
Ancak, innerFunc()
normal bir işlevdir ve this.age
erişilemez çünkü this
genel nesneye atıfta bulunur (tarayıcıdaki Window nesnesi). Dolayısıyla fonksiyonun this.age
içinde innerFunc()
verir undefined
.
Ok işlevinin içinde
function Person() ( this.name = 'Jack', this.age = 25, this.sayName = function () ( console.log(this.age); let innerFunc = () => ( console.log(this.age); ) innerFunc(); ) ) const x = new Person(); x.sayName();
Çıktı
25 25
Burada innerFunc()
işlev, ok işlevi kullanılarak tanımlanır. Ve ok işlevinin içinde, this
ebeveynin kapsamını ifade eder. Dolayısıyla 25this.age
verir .
Bağımsız Değişken Bağlama
Normal işlevler, bağlayıcı argümanlara sahiptir. Bu nedenle, normal bir işleve argümanlar aktardığınızda, bunlara arguments
anahtar kelimeyi kullanarak erişebilirsiniz . Örneğin,
let x = function () ( console.log(arguments); ) x(4,6,7); // Arguments (4, 6, 7)
Ok işlevlerinin bağımsız değişkenleri yoktur.
Ok işlevini kullanarak bir argümana erişmeye çalıştığınızda hata verecektir. Örneğin,
let x = () => ( console.log(arguments); ) x(4,6,7); // ReferenceError: Can't find variable: arguments
Bu sorunu çözmek için yayılma sözdizimini kullanabilirsiniz. Örneğin,
let x = (… n) => ( console.log(n); ) x(4,6,7); // (4, 6, 7)
Sözler ve Geri Çağrılar ile Ok Fonksiyonu
Ok işlevleri, sözler ve geri aramalar yazmak için daha iyi sözdizimi sağlar. Örneğin,
// ES5 asyncFunction().then(function() ( return asyncFunction1(); )).then(function() ( return asyncFunction2(); )).then(function() ( finish; ));
olarak yazılabilir
// ES6 asyncFunction() .then(() => asyncFunction1()) .then(() => asyncFunction2()) .then(() => finish);
Ok Fonksiyonlarıyla Kaçınmanız Gereken Şeyler
1. Nesnelerin içinde yöntemler oluşturmak için ok işlevlerini kullanmamalısınız.
let person = ( name: 'Jack', age: 25, sayName: () => ( // this refers to the global… // console.log(this.age); ) ) person.sayName(); // undefined
2. Yapıcı olarak bir ok işlevini kullanamazsınız . Örneğin,
let Foo = () => (); let foo = new Foo(); // TypeError: Foo is not a constructor
Not : Ok işlevleri ES6'da tanıtıldı . Bazı tarayıcılar ok işlevlerinin kullanımını desteklemeyebilir. Daha fazla bilgi edinmek için JavaScript Ok Fonksiyonu desteğini ziyaret edin.