2017-12-14 81 views
6

referans hatası atmak aynı isimde bir değişken kullanılarak varsayılan değer atama:Değişkenden JS varsayılan argüman değeri: neden tanımlayıcı farklı olmalı?

var a = 'adef'; 
var x = (a=a) => console.log(a); 
x(); 
=> "ReferenceError: a is not defined" 

Ama bu gayet:

var other = 'otherdef'; 
var x = (a=other) => console.log(a); 
x(); 
=> "otherdef" 

Benim varsayım olduğunu dış kapsamında a değeri olur yeni kapsam için atanmalıdır. (Krom 63 ve düğüm 6'da test edilmiştir)

I const yerine var kullanılarak çalıştılar

, ve bunun yerine bir ok-fonksiyon class/function, ancak sonuç her zaman aynıdır.

I have a ... mesele a atama sırasında 'hoisted' ve böylece atama (mevcut ancak tanımsız) yeni 'a' atıfta olmasıdır

+0

Evet, 'a', [parametre kapsamı] 'nda [https://stackoverflow.com/q/31219420/1048572] [https://stackoverflow.com/q/44896829/1048572] – Bergi

cevap

0

Bu davranışın amacı duygu

var a = 2; 
var x = (a, b = a) => console.log(a, b); 
x(42); // 42 42 

özel bir durum a = a farklı çalışır yapılabilir yapma ama bu zor kullanacağız fonksiyonlarını gözden geçirmeniz yapacak: bir parametre örneğin başka bir parametrenin değerini varsayılan-başlatılması için izin vermektir davranış (sen ren yapamazsın a parametresine, bağlı olduğu değişkeni yeniden adlandırmadan ame).

İlgili konular