| 网站首页 | 业界新闻 | 群组 | 人才 | 技术文章 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 1462 人关注过本帖
标题:新手求助,var和function关键字
只看楼主 收藏
wzy5665001
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-12-31
  问题点数:0  回复次数:7   
新手求助,var和function关键字
var a = 1;
    function a()
    {
        console.log(a);
    };
    a();
这几行JS代码运行会报错,但是原因是什么?求大神讲解
搜索更多相关主题的帖子: function  关键字  
2016-12-31 22:41
yusss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-1-24
  得分:0 
在nodejs里正常,在浏览器中报错,不知道是怎么回事,请大神现身

[此贴子已经被作者于2017-1-24 21:50编辑过]

2017-01-24 21:48
wei_guang
Rank: 1
等 级:新手上路
帖 子:9
专家分:5
注 册:2017-1-15
  得分:0 
你的函数名和变量名重名了
2017-02-01 13:56
玄剑
Rank: 2
等 级:论坛游民
威 望:1
帖 子:5
专家分:30
注 册:2016-11-10
  得分:0 
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 被重置为数字,故此无法加括号作为函数执行

2017-02-04 10:37
yusss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-1-24
  得分:0 
回复 4楼 玄剑
如何解释在nodejs里是正常的呢?
2017-02-09 18:39
玄剑
Rank: 2
等 级:论坛游民
威 望:1
帖 子:5
专家分:30
注 册:2016-11-10
  得分:0 
nodejs 中成功运行楼主的代码,仅有一种可能,即在 node 的命令行中如下步骤输入:

var a = 1;    // 此处回车
function a() { console.log(a); };     // 此处回车或者将 a(); 连写在其后
a();

因此输入不是一个整体,此时第二行的函数 a 将作为最新的定义,而无法提升到最前,因为输入 var a=1; 回车后即刻开始解释,此时解释器尚不知道其后会有一个函数 a;
在命令行中每次回车均进行一次解释执行,但是可以使用 【shift + 回车】书写多行。

[此贴子已经被作者于2017-2-10 11:14编辑过]

2017-02-10 11:10
yusss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-1-24
  得分:0 
回复 6楼 玄剑
有道理。

[此贴子已经被作者于2017-2-10 18:19编辑过]

2017-02-10 18:18
独善其身xjs
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-3-20
  得分:0 
把var a=1;

放进函数function 里面就行啦。
2017-03-20 15:22







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.059589 second(s), 8 queries.
Copyright©2004-2017, BCCN.NET, All Rights Reserved