首页 新闻 搜索 专区 学院

关于 js 执行的问题。。。

-1
[待解决问题]
var test;
//打印出 undefined
console.log(test);

首先上面的代码没有问题,打印出 undefined。

接下来是下面的代码:

function test() {
    return "this is function";
}
var test;

//打印的是 test 函数的方法体
console.log(test);

问题在这里,当函数和变量重名时,js 代码是从上至下执行的,那么为啥打印的是 test 函数体,而不是后面声明没有赋值的 test 变量,即打印出 undefined。

问题补充:

问题简化一下就是,在函数和变量同名的时候,为啥 console.log 的参数取得是函数,不是变量。

The Kite Runner的主页 The Kite Runner | 初学一级 | 园豆:10
提问于:2018-02-21 21:08
< >
分享
所有回答(5)
0

如果重新声明 JavaScript 变量,该变量的值不会丢失

http://www.w3school.com.cn/js/js_variables.asp

狂乱の貴公子 | 园豆:262 (菜鸟二级) | 2018-02-22 09:44
0

这是赋值的先后与存活期问题。

小小梁 | 园豆:209 (菜鸟二级) | 2018-02-22 16:53
0

无论是先声明var a 还是先声明 function a ,最终打印的结果是一样的。 这是因为:

1、两者都存在变量提升的问题

2、如果先声明 function a, 然后,当声明 var a 时,发现a已存在,就不做任何处理, 因此 a 中保存的是函数体。

2、如果先声明 var a, 当然后,当声明 function a 时,发现a已存在,就重写a为函数体,因此 a 中保存的也是函数体。

一像素 | 园豆:202 (菜鸟二级) | 2018-03-25 15:32
0

变量提升!!

啦啦啦小青蛙 | 园豆:204 (菜鸟二级) | 2018-05-25 10:59
0

var test;var test = undefined; 是不同的,如果这样写:

function test() {
    return "this is function";
}

var test = undefined;;

console.log(test);

此时打印出的就是 undefined,这样就能理解了。

zanetti | 园豆:149 (初学一级) | 2018-11-06 20:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册