javascript - JS函数声明的疑惑
巴扎黑
巴扎黑 2017-04-11 11:30:29
[JavaScript讨论组]
var a; 
function a(){}
console.log(a)

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

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

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

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

巴扎黑
巴扎黑

全部回复(2)
黄舟
  1. 函数声明会覆盖变量声明,你这里只是声明了变量,a和后面的函数声明重名了,于是就被覆盖了。

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

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

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

大家讲道理

关于第一个问题,“函数声明里面的函数名不是可以随便取吗,也可以不取,做匿名函数。比如: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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号