javascript - Masalah dengan nilai lalai parameter fungsi berfungsi dalam ES6?
阿神
阿神 2017-07-05 11:09:13
0
4
1267

Saya mempunyai banyak kekeliruan tentang situasi di mana nilai lalai parameter fungsi ialah fungsi
Sebagai contoh

let foo = 'outer';

function bar(func = x => foo) {
  let foo = 'inner';
  console.log(func()); 
}

bar(); //outer

Menurut pengenalan Ruan Yifeng kepada ES6, saya tahu bahawa jika parameter fungsi adalah nilai lalai, akan ada skop peringkat blok yang membungkus parameter terlebih dahulu, dan skop peringkat blok akan hilang selepas pemulaan selesai

Sebaik sahaja nilai lalai parameter ditetapkan, parameter akan membentuk skop (konteks) berasingan apabila fungsi diisytiharkan dan dimulakan. Apabila permulaan selesai, skop ini akan hilang. Tingkah laku tatabahasa ini tidak akan muncul apabila nilai lalai parameter tidak ditetapkan.

Saya boleh faham jika nilai lalai ialah pembolehubah biasa, tetapi saya masih tidak faham mengapa output di sini adalah luar dan bukannya dalam

阿神
阿神

闭关修行中......

membalas semua(4)
曾经蜡笔没有小新

Satu ayat: Penutupan fungsi terbentuk apabila ia ditakrifkan, bukan apabila ia dijalankan.

给我你的怀抱

Kembangkan gula sintaksis dengan teliti dan anda sepatutnya dapat melihatnya dengan lebih jelas

let foo = 'outer';

function fk_compiler() {
  return foo;
}

function bar(func) {
  if (func === undefined) {
    func = fk_compiler;
  }
  let foo = 'inner';
  console.log(func());
}

bar();

Lihat, fk_compiler里是不是只能返回外部作用域下的foo?

習慣沉默

js ialah skop leksikal dan nilai foo mengambil nilai apabila fungsi ditakrifkan dan bukannya apabila ia dilaksanakan.

给我你的怀抱

Berdasarkan kod responden:

let foo = 'outer';

function fk_compiler() {
  return foo;
}

function bar(func) {
  if (func === undefined) {
    func = fk_compiler;
  }
  let foo = 'inner';
  console.log(func());
}

bar();

js mengamalkan skop leksikal, jadi tidak kira di mana fungsi itu dipanggil, atau dalam sebarang bentuk, skop leksikalnya hanya ditentukan oleh kedudukan apabila ia diisytiharkan.

fk_compiler被声明的作用域在全局,所以,它会去访问全局作用域中的foo. Jawapannya akan keluar.

Kod serupa:

function foo(){
  console.log(this.a);
}
(function init(){
  var a = 'inner';//此处改为 window.a = 'global';再试试
  foo();
})();
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!