老师,这样结果为什么不对?

老师,这样结果为什么不对?

function isNumber(num1,num2){

上面这句传入了num1,num2 结果为什么就是“请输入数字类型的参数”了?

<!DOCTYPE html> 

<html> 

<head> 

    <meta charset="UTF-8" /> 

    <title>函数定义的位置</title> 

</head> 

<body> 

<script type="text/javascript"> 

function add(num1, num2){

    function isNumber(num1,num2){

        if(!isNaN(num1) && !isNaN(num2)){

            return parseInt(num1)+parseInt(num2);

        }else{

            return "请传入数字类型的参数";

        }

    }

    return isNumber();

}

document.write(add(4,2));

</script> 

</body> 

</html>


正在回答

登陆购买课程后可参与讨论,去登陆

4回答

如果isNumber函数中不传入参数,那么里面使用的变量就是add函数中的形参,计算好之后直接将结果返回,得到的结果也是正确的。

http://img1.sycdn.imooc.com//climg/5c2f3a980001213608630352.jpg

  • 小章鱼丸 提问者 #1
    那如果isNumber里传入了num1,num2,add里也传入了num1,num2,那isNumber()执行的就是它自己里面的局部变量,和add里传入的num1,num2就没关系了?
    2019-01-04 19:04:51
  • 好帮手慕星星 回复 提问者 小章鱼丸 #2
    是的,会先从当前作用域中找,也就是isNumber函数中,如果有就不会向上找了。
    2019-01-04 19:08:20
提问者 小章鱼丸 2019-01-04 18:41:44

function isNumber(){

上面这句不传入参数num1,num2 结果为什么就对了?

<!DOCTYPE html> 

<html> 

<head> 

    <meta charset="UTF-8" /> 

    <title>函数定义的位置</title> 

</head> 

<body> 

<script type="text/javascript"> 

function add(num1, num2){

    function isNumber(){

        if(!isNaN(num1) && !isNaN(num2)){

            return parseInt(num1)+parseInt(num2);

        }else{

            return "请传入数字类型的参数";

        }

    }

    return isNumber();

}

document.write(add(4,2));

</script> 

</body> 

</html>


好帮手慕星星 2019-01-04 16:44:36

1、代码中是给add函数传参的,但是isNumber函数中并没有传参,指的是你上传的代码中:

http://img1.sycdn.imooc.com//climg/5c2f1ba100010e6608060395.jpg

所以不符合if条件判断,执行else中的代码。

2、虽然两个函数的参数名一致,但是不是一样的参数。指的是:

http://img1.sycdn.imooc.com//climg/5c2f1c070001c35f10220330.jpg

3、老师的修改方式,是将add函数中的形参去掉,调用add方法的时候的之后,直接返回isNumber函数,也就是:

http://img1.sycdn.imooc.com//climg/5c2f1c71000190e508100359.jpg

a变量为isNumber整个函数:

http://img1.sycdn.imooc.com//climg/5c2f1c7d0001450a06120155.jpg

然后调用a传入参数就可以了:

http://img1.sycdn.imooc.com//climg/5c2f1caa00017b8a03570080.jpg

之前老师粘贴输出代码是简写形式,可以直接写:

http://img1.sycdn.imooc.com//climg/5c2f1cdd0001663503890033.jpg

就需要变量接收返回的函数了,直接调用。

自己再测试理解下。

  • 提问者 小章鱼丸 #1
    function isNumber() 上面这句不传入参数num1,num2 结果为什么就对了?对function isNumber()中是否要传参数及其原因不理解
    2019-01-04 18:43:39
好帮手慕星星 2019-01-04 15:51:09

你好,代码中是给add函数传参的,但是isNumber函数中并没有传参,虽然两个函数的参数名一致,但是不是一样的参数。返回isNumber函数也有问题,需要返回整个函数并不是调用之后的,参考修改:

http://img1.sycdn.imooc.com//climg/5c2f105a0001dcc307740496.jpg

自己测试下,祝学习愉快!

  • 提问者 小章鱼丸 #1
    "代码中是给add函数传参的,但是isNumber函数中并没有传参,"这句说的是谁的做法啊?不是我的做法啊 还是修改正确的做法啊?“虽然两个函数的参数名一致,但是不是一样的参数。”具体是哪里不一样呢?老师写的参考做法不太理解啊,3个画红框的地方都不理解
    2019-01-04 16:08:35
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师