编程论坛
注册
登录
编程论坛
→
JavaScript论坛
新手求助,var和function关键字
wzy5665001
发布于 2016-12-31 22:41, 3378 次点击
var a = 1;
function a()
{
console.log(a);
};
a();
这几行JS代码运行会报错,但是原因是什么?求大神讲解
7 回复
#2
yusss
2017-01-24 21:48
在nodejs里正常,在浏览器中报错,不知道是怎么回事,请大神现身
[此贴子已经被作者于2017-1-24 21:50编辑过]
#3
wei_guang
2017-02-01 13:56
你的函数名和变量名重名了
#4
玄剑
2017-02-04 10:37
JavaScript 在执行之前,将进行一个“预解释”过程,这个过程会优先解释函数声明,如:
程序代码:
function
a()
{
console.log(a);
}
因此,代码经过预解释的过程之后,便是如下样子:
程序代码:
function
a()
{
console.log(a);
};
var
a = 1;
a();
通常这个过程被形象地称为“函数提升”,然后函数声明将展开:
程序代码:
var
a;
a =
function
()
{
console.log(a);
};
var
a = 1;
a();
接而遇到重复声明的变量 a,这个声明将被忽略:
程序代码:
var
a;
a =
function
()
{
console.log(a);
};
var
a = 1;
a();
最终会被执行的代码将是这样:
程序代码:
var
a;
a =
function
()
{
console.log(a);
};
a = 1;
a();
//
a 被重置为数字,故此无法加括号作为函数执行
#5
yusss
2017-02-09 18:39
回复 4楼 玄剑
如何解释在nodejs里是正常的呢?
#6
玄剑
2017-02-10 11:10
nodejs 中成功运行楼主的代码,仅有一种可能,即在 node 的命令行中如下步骤输入:
var a = 1; // 此处回车
function a() { console.log(a); }; // 此处回车或者将 a(); 连写在其后
a();
因此输入不是一个整体,此时第二行的函数 a 将作为最新的定义,而无法提升到最前,因为输入 var a=1; 回车后即刻开始解释,此时解释器尚不知道其后会有一个函数 a;
在命令行中每次回车均进行一次解释执行,但是可以使用 【shift + 回车】书写多行。
[此贴子已经被作者于2017-2-10 11:14编辑过]
#7
yusss
2017-02-10 18:18
回复 6楼 玄剑
有道理。
[此贴子已经被作者于2017-2-10 18:19编辑过]
#8
独善其身xjs
2017-03-20 15:22
把var a=1;
放进函数function 里面就行啦。
1