Rumah > Soal Jawab > teks badan
Mengapa console.log(typeof(named)); dalam skop global tidak boleh mengakses nama ungkapan fungsi?
Selepas fungsi diisytiharkan, bukankah nama itu didedahkan dalam skop global
怪我咯2017-07-05 10:49:50
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?
tidak ditentukan. var d = function c(){}
里的d.name是存在的,值为字符串c,而var b = function(){}
. function c(){}
的函数体内部作用域,变量c是存在的,并且就是函数本身,和外部作用域的变量d等价,而匿名函数function(){}