84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
グローバル スコープにある console.log(typeof(named)); が関数式の名前にアクセスできないのはなぜですか? 関数が宣言された後、名前はグローバル スコープで公開されませんか? 解決策
函数表达式与函数声明有几点重要区别:
1, 函数声明会定义一个同名的变量,这个变量就是函数本身。函数表达式只是把定义的函数当成一个值,即使在function后加一个名字,它也不会把这个名字定义成变量,这个函数表达式是一个值,可以赋给其他变量。
function
function a(){} // 函数声明,同时在外部作用域定义了可以使用的变量a var b = function(){} //函数表达式,匿名函数是一个值,赋值给了变量b var d = function c(){} //函数表达式,函数本身是一个值,没有在外部作用域定义变量c,但赋值给了变量d。
2, 可以看到函数表达式里可以写function()也可以写function c(),既然后者也不会在外部作用域定义变量c,那么它们的区别在哪里,简单说有两点:
function()
function c()
var d = function c(){}里的d.name是存在的,值为字符串c,而var b = function(){}里的b.name是个undefined。
var d = function c(){}
var b = function(){}
在function c(){}的函数体内部作用域,变量c是存在的,并且就是函数本身,和外部作用域的变量d等价,而匿名函数function(){}内部只能用变量b来引用。
function c(){}
function(){}
所以这就解释了你在function named(){}函数体内访问到了named这个变量,而在外部作用域得到的是个未定义变量的问题。
function named(){}
函数表达式与函数声明有几点重要区别:
1, 函数声明会定义一个同名的变量,这个变量就是函数本身。函数表达式只是把定义的函数当成一个值,即使在
function
后加一个名字,它也不会把这个名字定义成变量,这个函数表达式是一个值,可以赋给其他变量。2, 可以看到函数表达式里可以写
function()
也可以写function c()
,既然后者也不会在外部作用域定义变量c,那么它们的区别在哪里,简单说有两点:var d = function c(){}
里的d.name是存在的,值为字符串c,而var b = function(){}
里的b.name是个undefined。在
function c(){}
的函数体内部作用域,变量c是存在的,并且就是函数本身,和外部作用域的变量d等价,而匿名函数function(){}
内部只能用变量b来引用。所以这就解释了你在
function named(){}
函数体内访问到了named这个变量,而在外部作用域得到的是个未定义变量的问题。