为什么这个问题答案是4,4?

为什么这个问题答案是4,4?

http://img1.sycdn.imooc.com//climg/5a15f3fb0001299323641060.jpg我记得老师讲的是 function属于对象 而对象都储存在堆内存中,所以放在栈内存中的是链接的地址,而fn链接的地址没变,add变了,为什么会继续运行呢?

正在回答 回答被采纳积分+1

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

3回答
怎么都被占用了呢 2017-11-26 13:21:34

可以这么理解,你可以测试一下这段代码,帮助理解

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>Document</title>

</head>

<body>

    <script>

        function add(sum1,sum2){

            return (sum1+sum2);

        }

        document.write(add(1,3));

        var fn=add;

        add=1;

        function add(sum1,sum2) {

            return sum1*sum2;

        };

        console.log(fn(1,4));

    </script>

</body>

</html>


怎么都被占用了呢 2017-11-24 09:40:47

add=1,只是给变量重新赋值,并不会改变内存中的函数地址呢。

  • 提问者 charr #1
    可不可以这样理解,如果add赋值给一个新的地址,fn也会改变到那个地址,但是如果add赋值给一个基本数据类型,就直接退出堆内存对fn没有影响?
    2017-11-25 01:59:29
小丸子爱吃菜 2017-11-23 13:51:38

因为arguments.callee表示函数本身,所以不管函数名怎么变,内部调用的都是函数本身,此时都可以计算出正确结果而不会报错.

祝学习愉快!

  • 提问者 charr #1
    老师我的问题是 为什么fn还是链接到了这个function呢?add已经不再是function了 按理说既然fn链接的是地址 地址已经变了 变成1 为什么还能当function调用?
    2017-11-24 03:50:16
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
HTML5与CSS3实现动态网页 2018
  • 参与学习       1887    人
  • 提交作业       4643    份
  • 解答问题       5760    个

有HTML和CSS基础,却不知道如何进阶?本路径带你通过系统学习,完成从“会做网页”到“做出好的动态网页”的蜕变,迈出成为前端工程师的第一步。

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

在线咨询

领取优惠

免费试听

领取大纲

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