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

看这样一个题目:

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。

就这么简单。

原文发布于微信公众号 - web前端教室(webfeel)

原文发表时间:2017-10-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈树义

如何唯一确定一个 Java 类?

今天偶然想起之前和朋友讨论过的一个问题:如何唯一确定一个 Java 类?我相信大多数朋友遇到这个问题的回答都是:类的全路径呗。但事实上,唯一确定一个 Java ...

25130
来自专栏猿人谷

字节大小

首先看一个例子: 1 #include <iostream> 2 using namespace std; 3 4 class A{}; 5 6...

205100
来自专栏Android干货

Python函数式编程(一):高级函数

11620
来自专栏IT可乐

深入理解计算机系统(3.8)------数组分配和访问

  上一篇博客我们讲解了汇编语言中过程(函数)的调用实现。理解数据如何在调用者和被调用者之间传递,以及在被调用者当中局部变量内存的分配以及释放是最重要的。那么这...

225100
来自专栏编程直播室

TypeScript中的可选属性和只读属性

39670
来自专栏淡定的博客

python入门基础语法总结

10930
来自专栏和蔼的张星的图像处理专栏

684. 缺少的字符串分解到vector中借助find函数

先把两个字符串都分解到vector中,以空格为标志,然后在借助find函数来找出两个vector中不同的单词。

14330
来自专栏python3

python 函数

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

11910
来自专栏C语言及其他语言

【每日一题】问题 1195: 去掉双斜杠注释

题目描述 将C程序代码中的双斜杠注释去掉。 输入 输入数据中含有一些符合C++语法的代码行(每行代码不超过200个字符)。需要说明的是,...

31790
来自专栏思考的代码世界

Python基础学习01天

21900

扫码关注云+社区

领取腾讯云代金券