"JavaScript Röportajında Ustalaşın", adayları orta ve üst düzey JavaScript pozisyonu için başvururken karşılaşabilecekleri yaygın sorulara hazırlamak için tasarlanmış bir yazı dizisidir. Bunlar gerçek görüşmelerde sıklıkla kullandığım sorular.
Seriyi 40 bin dolarlık soruyla başlatıyorum. Bu soruyu yanlış cevaplarsanız, işe alınmama ihtimaliniz yüksek. İşe alınırsanız, yazılım geliştiricisi olarak ne kadar süredir çalışıyor olursanız olun, genç bir geliştirici olarak işe alınma şansınız yüksektir. Ortalama olarak, kıdemsiz geliştiricilere, daha deneyimli yazılım mühendislerine göre yılda 40.000 ABD Doları daha az ödeme yapılır.
Kapanışlar önemlidir, çünkü belirli bir fonksiyonda neyin kapsam içinde olup olmadığını ve aynı kapsama alanındaki kardeş fonksiyonlar arasında hangi değişkenlerin paylaşıldığını kontrol ederler. Değişkenlerin ve işlevlerin birbiriyle nasıl ilişkili olduğunu anlamak, hem işlevsel hem de nesne yönelimli programlama stillerinde kodunuzda neler olup bittiğini anlamak için çok önemlidir.
Bir röportajda bu soruyu kaçırmanın bu kadar dezavantajlı olmasının nedeni, kapanışların nasıl çalıştığına dair yanlış anlamaların, sadece JavaScript'te değil, aynı zamanda kapanışlara çok fazla dayanan herhangi bir dilde derin deneyim eksikliğini ortaya çıkarabilecek oldukça açık bir kırmızı bayrak olmasıdır Haskell, C #, Python, vb.).
Kapanışları anlamadan JavaScript'te kodlama yapmak, dilbilgisi kurallarını anlamadan İngilizce konuşmaya çalışmak gibidir - fikirlerinizi yayabilirsiniz, ancak muhtemelen biraz garip olabilir.
Başkasının ne yazdığını anlamaya çalışırken de yanlış anlamalara karşı savunmasız olacaksınız.
Sadece kapatmanın ne olduğunu bilmekle kalmamalı, neden önemli olduğunu bilmeli ve kapatmalar için birkaç olası kullanım durumuna kolayca cevap verebilmelisiniz.
Kapanışlar JavaScript'te nesne veri gizliliği için, olay işleyicilerinde ve geri çağırma işlevlerinde ve kısmi uygulamalarda, currying ve diğer işlevsel programlama modellerinde sıklıkla kullanılır .
Bu soruyu cevaplayamazsanız, bu iş size mal olabilir veya yılda ~ 40.000 $.
Hızlı bir takibe hazırlıklı olun: "Kapanışlar için iki yaygın kullanımdan bahsedebilir misiniz?"
Bir kapak birlikte paketlenmiş bir fonksiyonu kombinasyonu çevresindeki durumuna referanslarla ((kapalı) sözlü ortamını ). Başka bir deyişle, bir kapanış, bir iç işlevden bir dış işlevin kapsamına erişmenizi sağlar. JavaScript'te, bir işlev her oluşturulduğunda, işlev oluşturma sırasında kapanmalar oluşturulur.
Bir kapanış kullanmak için, başka bir işlevin içindeki bir işlevi tanımlayın ve onu açığa çıkarın. Bir işlevi açığa çıkarmak için onu geri döndürün veya başka bir işleve aktarın.
İç işlev, dış işlev geri döndükten sonra bile dış işlev kapsamındaki değişkenlere erişebilir.
Diğer şeylerin yanı sıra, kapamalar genellikle nesnelere veri gizliliği sağlamak için kullanılır. Veri gizliliği, bir uygulamaya değil, bir arayüze programlama yapmamıza yardımcı olan temel bir özelliktir. Bu, daha sağlam yazılım geliştirmemize yardımcı olan önemli bir kavramdır çünkü uygulama ayrıntılarının, ara yüz sözleşmelerinden daha fazla kırılma şekillerinde değişme olasılığı daha yüksektir.
"Bir uygulamaya değil, bir arayüze programlayın."
Tasarım Desenleri: Yeniden Kullanılabilir Nesne Yönelimli Yazılımın Öğeleri
JavaScript'te, veri gizliliğini etkinleştirmek için kullanılan birincil mekanizmadır kapatmalar. Veri gizliliği için kapatmalar kullandığınızda, içerilen değişkenler yalnızca kapsama (dış) işlevinin kapsamındadır. Verileri, nesnenin ayrıcalıklı yöntemleri dışında bir dış kapsamdan alamazsınız . JavaScript'te, kapatma kapsamında tanımlanan herhangi bir açık yöntem ayrıcalıklıdır. Örneğin:
Bununla JSBin'de oynayın . (Herhangi bir çıktı görmüyor musunuz? Bu HTML'yi kopyalayıp HTML bölmesine yapıştırın .)
Yukarıdaki örnekte, `.get () ' yöntemi kapsamında içinde tanımlandığı ` getSecret ()' de herhangi bir değişken erişim sağlar, getSecret '()', ve ayrıcalıklı bir yöntem sağlar. Bu durumda, "gizli" parametresi .
Veri gizliliği sağlamanın tek yolu nesneler değildir. Kapanışlar ayrıca , dönüş değerleri dahili durumlarından etkilenebilen durum bilgisi olan işlevler oluşturmak için de kullanılabilir , örneğin:
const secret = msg => () => msg;
Fonksiyonel programlamada, kapaklar sıklıkla kısmi uygulama ve pişirme için kullanılır. Bu, bazı tanımlar gerektirir:
Uygulama: Bir dönüş değeri üretmek için bağımsız değişkenlerine bir işlev uygulama süreci .
Kısmi Uygulama: Bir fonksiyonun bazı argümanlarına uygulama süreci . Kısmen uygulanan işlev daha sonra kullanılmak üzere döndürülür . Kısmi Uygulama düzeltmeleri (kısmen işlevi de geçerlidir), bir ya da daha fazla dönen işlevi içinde değişkenleri ve geri fonksiyonu fonksiyonu uygulaması tamamlamak için bağımsız değişken olarak kalan parametreleri alır.
Kısmi uygulama, parametreleri sabitlemek için kapatma kapsamından yararlanır . Hedef işleve kısmen bağımsız değişkenler uygulayacak genel bir işlev yazabilirsiniz. Aşağıdaki imzaya sahip olacaktır:
partialApply(targetFunction: Function, ...fixedArgs: Any[]) => functionWithFewerParams(...remainingArgs: Any[])
Herhangi bir sayıda argümanı alan ve ardından fonksiyona kısmen uygulamak istediğimiz argümanları alan ve kalan argümanları alacak bir fonksiyon döndüren bir fonksiyon alacak.
Bir örnek yardımcı olacaktır. İki sayı ekleyen bir işleviniz olduğunu varsayalım:
const add = (a, b) => a + b;
const add10 = partialApply(add, 10); add10(5);
Olası bir "partialApply ()" uygulamasına bakalım :
JSBin'de mevcuttur . (Herhangi bir çıktı görmüyor musunuz? Bu HTML'yi kopyalayıp HTML bölmesine yapıştırın .)
Gördüğünüz gibi, sadece "partialApply ()" fonksiyonuna aktarılan "fixedArgs" argümanlarına erişimi tutan bir fonksiyon döndürür .
Bu gönderi, EricElliottJS.com üyeleri için tamamlayıcı bir video gönderisine ve uygulama ödevlerine sahiptir. Zaten üyeyseniz, şimdi oturum açın ve pratik yapın .
Üye değilseniz bugün kaydolun .
Eric Elliott , "Composing Software" in yazarıdır . EricElliottJS.com ve DevAnywhere.io'nun kurucu ortağı olarak , geliştiricilere temel yazılım geliştirme becerilerini öğretiyor. Kripto projeleri için geliştirme ekipleri kuruyor ve onlara danışmanlık yapıyor ve Adobe Systems, Zumba Fitness, The Wall StreetJournal, ESPN, BBC ve Usher, Frank Ocean, Metallica ve daha pek çok ünlü kayıt sanatçısı için yazılım deneyimlerine katkıda bulundu .
Dünyanın en güzel kadınıyla uzak bir yaşam tarzına sahip.
Yapay Zeka (AI), endüstrilerde devrim yaratma, yaşama ve çalışma şeklimizi değiştirme ve topluma sayısız fayda sağlama potansiyeline sahip, hızla gelişen bir teknolojidir. Ancak, her yeni teknolojide olduğu gibi, dikkate alınması gereken etik hususlar da vardır.
Yapay Zekaya Giriş Yapay Zeka (AI), endüstrilerde devrim yaratma, yaşama ve çalışma şeklimizi değiştirme ve topluma sayısız fayda sağlama potansiyeline sahip, hızla gelişen bir teknolojidir. Ancak, her yeni teknolojide olduğu gibi, dikkate alınması gereken etik hususlar da vardır.
Verimsizlik dünyanın en büyük işverenidir. Verimsizliği teknoloji ile çok hızlı bir şekilde ortadan kaldırın ve büyük bir sivil huzursuzluğa hazırsınız.
Yapay Zekaya Giriş Yapay Zeka (AI), endüstrilerde devrim yaratma, yaşama ve çalışma şeklimizi değiştirme ve topluma sayısız fayda sağlama potansiyeline sahip, hızla gelişen bir teknolojidir. Ancak, her yeni teknolojide olduğu gibi, dikkate alınması gereken etik hususlar da vardır.
İnsanlara şans verme konusunda hayatta biraz geç kalındığına inanıyorum. Cömertçe.
Dört yıldır İngilizce öğretiyorum. Bu dört yıl içinde insanlar bana çalışmalarını düzeltmekten konuşma ve makale yazmaya kadar her türlü taleple geldiler.