yapamazsınız "takma" eval
ve aynı davranmasını bekliyoruz. Bu kadar basit. Niye ya? eval
bir işlev değil.
Neler oluyor, eval2
numaralı telefonu aradığınızda, global değişkenlerle çalışmak için "önbellek" değişkenini ayarlıyorsunuz. Bu nedenle, içinde bir değişken belirleyerek, bir global değişken ayarlıyorsunuz. Bununla birlikte, çıktıktan sonra, "önbellek" değişkeni, kapsamdaki fonksiyona geri döner. Bu yüzden ikinci alert
1'i gösterir - global değişken, işlev seviyesi bir tarafından gölgeleniyor.
Bu
Ek E ECMAScript (vurgu mayın) ait (sayfa 239)
10.4.2 not edilir: Edition'da 5'te, eval işlevi için dolaylı görüşmeleri olarak küresel çevreyi kullanmak hem değişken ortamı ve değerlendirme kodu için sözcüksel ortam. 3. Baskıda, dolaylı değerlendirmenin arayıcı değişken ve sözcük ortamları, değerlendirme kodunun ortamları olarak kullanılmıştır.
hiçbir arama bağlam veya varsa eval kodu değilse "Eval Kodunu Girme" tam tanımı §10.5.2 (sayfa 58) (vurgu benim)
- tanımlanan
Bu ise, daha sonra Eval fonksiyonuna, bir doğrudan (15.1.2.1.1) tarafından değerlendirilmektedir
- yürütme kapsamını initialism 10.4.1.1 de tarif edildiği gibi C Eval kodunu kullanarak küresel yürütme içeriği . Başka
,
- arama yürütme bağlamının ThisBinding aynı değere ThisBinding ayarlayın.
- LexicalEnvironment öğesini çağıran yürütme işlevi içeriğinin LexicalEnvironment değeriyle aynı değere ayarlayın.
- VariableEnvironment öğesini çağıran yürütme içeriğinin VariableEnvironment ile aynı değere ayarlayın. eval kod sıkı kod ise
ardından
- Let NewDeclarativeEnvironment argüman olarak LexicalEnvironment geçen çağırarak sonucu strictVarEnv.
- LexicalEnvironment öğesini strictVarEnv olarak ayarlayın.
- VariableEnvironment öğesini strictVarEnv olarak ayarlayın.
Değerlendirme kodunu kullanarak 10.5'te açıklandığı gibi Beyan Bağlama Örnekleme gerçekleştirin.
Birincisi nasıl beklenmiyor? –
"eval" takmadığında, 1, 2 görüntülenir, ikinci işleve bakın. Beklenirse, soruya cevap verebilir misiniz? Teşekkürler. – simonzack
Evet ama ilkinin 1 ve 2 göstererek beklenmedik şekilde davrandığını söylediniz. Bu bekleniyor. –