strict
modunu bir de this
değerini kullanarak normal işlev çağrısı undefined
. Durumun tam olarak budur. İşleviniz:
(function (global) {
"use strict";
var self = this;
...
})(window);
yüzden this
tanımsız olacaktır sadece normal işlev çağrısı mı. strict
modunu kullanmıyorsanız, normal bir işlev çağrısında this
genel nesneye ayarlanacaktır. Aksi halde, this
, işlev yalnızca başka bir yolla çağrıldığında benzersiz bir değere ayarlanır (new
, .apply()
veya .call()
veya obj.method()
'da olduğu gibi).
self
iş çevresinde this
zaten istenen nesneye işaret ve geri çağrıları daha sonra kullanmak üzere referansı kaydetmek istediğiniz kullandığınız durumlar içindir. Kodunuzda bu durum söz konusu olmadığından ve kodunuzda this
'u kullanmayı beklediğinizden net olmadığı için, hangi nesneyi denediğiniz konusunda daha fazla açıklama yapmadan sorununuzu çözmeniz önerilir. referans.
Sadece genel nesneyi referans almak istiyorsanız, kodunuzda yalnızca global.test
referansını kullanabilirsiniz. Eğer başka bir nesneye işaret etmek this
bekliyoruz
(function (global) {
"use strict";
function onDeviceReady() {
global.test = "123";
loadMapsApi();
}
function loadMapsApi() {
console.log(global.test);
}
})(window);
, o zaman işaret etmek onu bekliyorsanız açıklamak zorunda kalacak ve o zaman nasıl belirli belirtmeyi bir fikir sunabilir nesne.
sadece işlerin yapmak için "use strict";
çıkarmayın. strict
modunu kullanırken kodunuzun düzgün çalışmadığı gerçeği, kodunuzun strict
kipinin korunmak üzere tasarlandığı kötü bir uygulama kullandığı anlamına gelir. Bunun yerine, strict
modunu kullanmaya devam etmeli ve bunun yerine kötü uygulamayı kullanmayı durdurmak ve strict
moduyla düzgün şekilde çalışmak için kodunuzu düzeltmeniz gerekir. İleride
, görebilmek için Javascript bir işlev çağrısı içeriye this
ayarlamak konuya ilişkin bir karar öğrenmek istiyorsanız, bu cevabı okuyabilirsiniz: When you pass 'this' as an argument. Bu cevap, this
değerinin belirlenmesinin beş farklı yolunu listeler.
Bu şeyin ne olduğunu düşünüyorsunuz? –
Bu fonksiyonlar arasında param kullanmamaları arasında bir şeyleri paylaşmanın bir yöntemi olmasını bekler miydim? : D – user2391356
Bunun yerine bir 'closure' kullanın ya da' use use' komutunu kaldırın. SıkıĢtırmak '' '' ile '' '' 'ye erişmenizi sağlayacaktır. –