首页新闻找找看学习计划

关于 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
< >
分享
所有回答(6)
0

这里给的解释比较好
js中变量与函数同名
但是上面没有说同名函数与变量时变量没有赋值时的情况,我也搞的不是很清楚,只能给你一个结论
如果你的代码是下面这个样子

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

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

那么打印的就会是1,也就是说如果变量没有被赋值,那么它的值会是与他同名上一个变量或函数,这里可能涉及到javascript的编译与执行的机制的问题,具体的也不太懂,只能给你一个结论。

流年飞雨 | 园豆:1918 (小虾三级) | 2018-02-22 05:02

如果你的代码是这个样子的话

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

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

打印的也是1

支持(0) 反对(0) 流年飞雨 | 园豆:1918 (小虾三级) | 2018-02-22 05:17

没赋值与赋值的差别吧

支持(0) 反对(0) 流年飞雨 | 园豆:1918 (小虾三级) | 2018-02-22 05:17
支持(0) 反对(0) 流年飞雨 | 园豆:1918 (小虾三级) | 2018-02-23 13:34
0

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

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

狂乱の貴公子 | 园豆:270 (菜鸟二级) | 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 | 园豆:157 (初学一级) | 2018-11-06 20:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册