首页 > JS函数声明的疑惑

JS函数声明的疑惑

var a; 
function a(){}
console.log(a)

答案是 function a(){}
很疑惑的是 函数声明里面的函数名不是可以随便取吗,也可以不取,做匿名函数。比如

function(){} 这样
或者
var b = function a(){}如此

所以为啥 上面的答案是function a(){}

我觉得function a(){} 这里的 a 和var a 里的 a只是凑巧名字一样而已 为什么会赋值?


  1. 函数声明会覆盖变量声明,你这里只是声明了变量,a和后面的函数声明重名了,于是就被覆盖了。

  2. 赋值操作会覆盖声明操作,比如这样——

    var a = 0; 
    function a(){};
    console.log(a);      //0 

    虽然函数的声明覆盖了变量的声明,但是变量的赋值操作又覆盖了函数的声明,所以最后的结果是0。


上面各位都讲得差不多了,不但覆盖,就假如只有一句这样的代码:


    function a(){};
    console.log(a);

以上代码打印出来也是如此:

js高程里面有这个例子。


手机APP上的给不了链接。
你点开我的主页,看我最近的一次回答。看完不懂私信我,说到你懂为止。


链接 https://.com/q/1010000005921127/a-1020000005921922


关于第一个问题,“函数声明里面的函数名不是可以随便取吗,也可以不取,做匿名函数。比如:function(){}”。

你确定这个代码是可以执行的么? - function(){}并不是有效的Javascript代码吧?

当你希望使用匿名函数时,必须将其赋值给一个变量,或者用在iife(Immediately Invoked Function Expression),如:

//赋值
var hello = function (){ };

//iife
(function (){ }());

我觉得function a(){} 这里的 a 和var a 里的 a只是凑巧名字一样而已 为什么会赋值?

这话从何而来?怎么还整出赋值来了?我猜你可能把栗子理解成这样了:

var a = function (){};
console.log(a);

其实不是这样子的,没这么先进。

这么理解会不会好点儿?

var a;
var a = function(){};
console.log(a);

虽然变量名都叫a,但明显下面那个覆盖了上面那个,所以最后打印出来的是函数,不是undefined

【热门文章】
【热门文章】