首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >十一国庆节 之 “变量与函数同名时,会输出谁?”

十一国庆节 之 “变量与函数同名时,会输出谁?”

作者头像
web前端教室
发布2018-02-07 11:56:30
6280
发布2018-02-07 11:56:30
举报
文章被收录于专栏:web前端教室web前端教室

看这样一个题目:

b = function c() {
    a = 1, b = 2, c = 3;
    console.log(a);    //1
    console.log(b);    //2
    console.log(c);    //fuction c(){...
};
b();

它的结果是什么?你想想再回答,这次我又答对了

答案是,

1,
2,
function c(){....

为什么是这样呢?其实也很简单,首先明确以下几个事实:

1、function之外的b是函数,function之内的b是一个全局变量;

2、js的变量和函数声明都会被保存到上下文对象中,也就是AO对象之中;

3、函数声明的优先级,高于,变量声明,但并不会覆盖它;

看下面这个demo:

var xx = function axx(){
 console.log('1:'+typeof axx)
}
console.log('2:'+typeof axx)
xx();

输出是多少?

var xx = function axx(){...,这是一个命名表达式,但它的名字axx,只是在它所定义的作用域范围之内才是有效的。

所以回到最开始时的那个题目,b是一个没有使用var声明的变量,它的值是一个函数,这个函数的标识符,也就是函数名是c,所以它在自己的作用域之内是可以访问的,并且因为c是函数标识,所以同名的变量名c,不能覆盖同名的函数名c。

就这么简单。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-10-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 web前端教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档