求教类似JAVA函数重载 运行哪个函数问题

ysymizson 2017-05-08 10:41:09
<script type="text/javascript">
var fn = function(x,y){
console.log('var');
return x+y;
}
//<<1>>
// var fn = function(x){
// console.log('fun');
// return x-2;
// }

//<<2>>
function fn(x){
console.log('fun');
return x-2;
}
console.log(fn(4,5));
</script>
控制台输出:
[Web浏览器] "var" /jsstudy/xitonghanshu2.html (8)
[Web浏览器] "9" /jsstudy/xitonghanshu2.html (23)
才学不久,老师说JavaScript没有函数重载,对形参个数没限制,想实现java函数重载功能用arguments实现。
java函数重载方式,只会运行最后一个fn函数。按<<1>>方式写会运行<<1>> (最后一个fn())。
疑惑: 按如上代码 怎么就运行上面的fn(),不运行最后一个fn()求大神指教?
...全文
95 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
天际的海浪 2017-05-08
如下面代码

var fn = function () {
	console.log("var");
};

function fn() {
	console.log("fun");
}

fn();
在浏览器解析时会变成

function fn() {
	console.log("fun");
}

var fn;
//以上是自动声明提升的部分

fn = function () {
	console.log("var");
};

fn();

回复
天际的海浪 2017-05-08
js中有函数或者变量声明提升的特性,就相当于把函数或者变量的声明代码移动到所在作用域环境的最前面。 函数的声明提升只对语句试函数声明有意义。如 function fn() { } 对函数表达式没有意义,如 var fn = function () {};这实际上是对fn变量的赋值操作,赋值操作没有提升特性的。
回复
xiaojunjor 2017-05-08
你们老师说得对,js里没有函数重载 至于这个输出的问题,是因为js中声明提前并且函数的声明先于变量声明的原因 var fn = function这个是函数表达式,也就是声明一个变量fn function fn(){}这个是函数声明 函数声明在前,所以var fn = function把先声明的function fn(){}覆盖掉了,所以fn就变成了x+y 如果你觉得理解起来有点困难,可以试着理解下面这两个输出 console.log(f); var f = 1; function f(); console.log(f);
回复
发动态
发帖子
JavaScript
创建于2007-09-28

8.4w+

社区成员

Web 开发 JavaScript
申请成为版主
社区公告
暂无公告