首页 新闻 搜索 专区 学院

JS函数的相关问题

0
悬赏园豆:20 [已解决问题] 解决于 2019-04-24 11:02

var ss = function (){
console.log(1);
}
function ss (){
console.log(2);
}
ss(); //1
为什么调用ss输出的结果是1,有的人说 var 优先,能解释一下吗?

没有翅膀的脚的主页 没有翅膀的脚 | 初学一级 | 园豆:58
提问于:2019-04-21 21:21

变量提升 然后 函数申明 大于变量的优先级 function ss(){} 最高优先级

偏灬爱 1年前
< >
分享
最佳答案
1

我开始也蒙了,后面一想,其实这个结果还真是那么回事,首先你应该也知道函数提升和变量提升
但是还有一个:函数提升优先级高于变量提升、而函数分函数声明式和函数字面量式,函数提升只对前者有效
你写的这两个函数,后者才会被提升,而运行后,后者被提升后,立马又被覆盖了,所以结果才是这样,
如果再加上变量:

alert(ss);//C函数
var ss = function() { //A
    console.log(1);
}
var ss = 123456; //B

function ss() { //C
    console.log(2);
}
alert(ss);//123456

上面结果解析:程序运行时,函数提升优于变量提升,而字面量式函数不会提升,因此,C在最上面,然后被A覆盖,最后被B覆盖,最后结果就是123456,而首行输出C函数,因为C在最上面,这里的提升只是声明提升,而赋值还在原地进行的.....

收获园豆:20
学会乐观 | 小虾三级 |园豆:737 | 2019-04-22 10:33

其实简单理解就像给变量赋值一样,两次赋值,后面的值会把前面的覆盖掉,这里把函数和变量都当成变量看就行了

学会乐观 | 园豆:737 (小虾三级) | 2019-04-22 10:38

@iiiiiim: 感谢您的回答,我明白了 微笑

没有翅膀的脚 | 园豆:58 (初学一级) | 2019-04-24 11:02
其他回答(5)
0

作用域问题,function ss 可以理解为window.ss=xx;
var ss=function等于是当前方法体内的私有变量。级别高一些。

var bb=0;
function dmeo(){
var bb=1;
console.log(bb)//ouput 1;
}
dmeo();

czd890 | 园豆:8897 (大侠五级) | 2019-04-21 21:29
0

咱暂且抛开这个问题,先来了解一下它俩的区别

1.首先我们要明确函数的声明形式可以有两种方式:
---函数表达式
var fun = function(){
}
---函数体
function fun(){
}

2.区别
函数表达式:只有var fun声明的后面使用函数
函数体:function fun(){}声明之前便可使用
注:本质上,都是表达fun()这个函数

3.对于这题
ss();是在两者的后面,对于funcion ss(){}早已经在var ss之前就解释完整,
但对于var ss=function(){},只有在var 的时候才解释,因此var ss=function(){}会
覆盖function ss(){};
显示1

Anthony7 | 园豆:204 (菜鸟二级) | 2019-04-21 23:01
0

这题涉及到函数申明提前,实际上代码可以认为是:

var ss;

function ss (){
  console.log(2);
}

ss = function (){
  console.log(1);
}

ss();

结果可想而知。

幻天芒 | 园豆:36594 (高人七级) | 2019-04-21 23:39
0

这个是一个知识点,叫做,js变量提升。

女寝楼下卖瓜的泡泡糖 | 园豆:522 (小虾三级) | 2019-04-22 00:08
0

函数申明优先运行,再运行函数函数赋值,所以函数赋值会覆盖函数申明

夏的世界的伤 | 园豆:202 (菜鸟二级) | 2019-04-22 00:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册