2011-12-24 27 views
5

Tarayıcılar ve Düğüm arasındaki fark nedir? DüğümündeTarayıcılar ve Düğüm arasındaki fark nedir?

setName.js: tarayıcıda

var setName; 
setName = function (name) { 
    return this.name = name; 
}; 
setName("LuLu"); 
//LuLu 
console.log(name); 
//undefined 
console.log(this.name); 

setName.html: Örneğin

<script> 
    var setName; 
    setName = function (name) { 
     return this.name = name; 
    }; 
    setName("LuLu"); 
    //LuLu 
    console.log(name); 
    //LuLu 
    console.log(this.name); 
</script> 

ikinci günlük farklıdır, neden?

+0

o, benim düğüm versiyonu 'v0.4.10' – island205

+3

gerçekten "tanımsız" dir (1) Biz tarayıcıda genel değişkenleri kaçınmaya çalışın. (2) Eğer sıkı mod kodu yazmaya başlamak istersiniz, bu durumda yukarıdaki kod atar ... –

cevap

7

Düğüm bir JavaScript motorudur, bir tarayıcıdır. Node'da undefined ve bir tarayıcıda Lulu görmenizin belirli nedeni? Differences in the global namespace:

Tarayıcınızda, en üst düzey kapsam genel kapsamdır. Bu, küresel kapsamda var something kapsamındaysanız, bir global değişken tanımlayacağınız anlamına gelir. Düğümde bu farklıdır. En üst düzey kapsam, küresel kapsam değildir; Bir Node modülünün içinde var something bu modüle yerel olacaktır. tarayıcısında

, this window nesneye bir referans - tarayıcının genel ad - (ör değil foo.bar() gibi), bir nesneye serbest çağrılan tüm fonksiyonlar için kullanılabilir. Düğümte, this, yalnızca genel ad alanı için bir başvuru değildir.


N.B. Bir Node yorumlayıcısındaconsole.log(this.name), undefined değil Lulu yazdıracaktır. ilgili @Šime Vidas' comment tarafından istendiğinde olarak


sadece REPL içinde ,

> this === global 
true 
Ayrıca How To Node: What is "this?"


Tamam, bir daha düzenlemek @ okuma olmasıdır thisES5 strict mode yılında:

  • Genel bağlamda (herhangi bir işlevin dışında), this, katı modda olsun veya olmasın genel nesneyi ifade eder.
  • this anahtar sözcüğü bir işlev içinde gerçekleştiğinde, değeri how the function is called'a bağlıdır.
  • Bir işlev, bir nesnenin yöntemi olarak çağrıldığında, yöntemin çağrıldığı nesneye this atanır. one of his blog posts içinde Juriy Zaytsev (aka @kangax) arasında

Daha ilginç okuma nezaket.

+3

Kesin mod hakkında bilgi ekleyerek cevabınızı daha geleceğe dönük hale getirmeyi düşünün. (İşlev gövdelerinde, "bu, açıkça çağrılma yöntemi tarafından ayarlanmadığı sürece tanımsızdır.) –

+0

haklısınız, ancak REPL yalnızca! – island205

+0

@ Šime bu nasıl? –

2

Tarayıcınızın kodu window ana makine nesnesine sahiptir. Düğümde bu ana makine nesnesi yok.this.name'u ayarladığınızda, bir global değişkenininesnesine ayarlarsınız.

window.name === this.name // true

İlgili konular