javascript - Kedudukan console.log(typeof(named) adalah berbeza. Mengapa yang kedua menunjukkan tidak ditentukan?
某草草
某草草 2017-07-05 10:47:50
0
1
815

Mengapa console.log(typeof(named)); dalam skop global tidak boleh mengakses nama ungkapan fungsi?
Selepas fungsi diisytiharkan, bukankah nama itu didedahkan dalam skop global

某草草
某草草

membalas semua(1)
刘奇

Terdapat beberapa perbezaan penting antara ungkapan fungsi dan pengisytiharan fungsi:

1 Pengisytiharan fungsi akan mentakrifkan pembolehubah dengan nama yang sama, iaitu fungsi itu sendiri. Ungkapan fungsi hanya menganggap fungsi yang ditakrifkan sebagai nilai Walaupun nama ditambah selepas function, ia tidak akan mentakrifkan nama sebagai pembolehubah ini ialah nilai dan boleh diberikan kepada pembolehubah lain.

function a(){} // 函数声明,同时在外部作用域定义了可以使用的变量a
var b = function(){} //函数表达式,匿名函数是一个值,赋值给了变量b
var d = function c(){} //函数表达式,函数本身是一个值,没有在外部作用域定义变量c,但赋值给了变量d。

2. Anda boleh melihat bahawa function()也可以写function c() boleh ditulis dalam ungkapan fungsi Memandangkan pembolehubah c dalam skop luaran, apakah perbezaan di antara mereka?

b.nama dalam
  • tidak ditentukan. var d = function c(){}里的d.name是存在的,值为字符串c,而var b = function(){}

  • hanya boleh dirujuk oleh pembolehubah b di dalam

    . function c(){}的函数体内部作用域,变量c是存在的,并且就是函数本身,和外部作用域的变量d等价,而匿名函数function(){}

Jadi ini menerangkan masalah anda mengakses pembolehubah yang dinamakan dalam badan fungsi, tetapi mendapat pembolehubah yang tidak ditentukan dalam skop luar.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan