博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个javascript面试题
阅读量:4993 次
发布时间:2019-06-12

本文共 1308 字,大约阅读时间需要 4 分钟。

 javascript面试题代码:

 

 

已经调试前两行代码,输出结果为:

调试下两行代码:

var a1=a.fun(1);

console.log(a1);

 

 接下来直接调试4行代码:

从输出内容上可以看到:x的值从来没有变过,一直是0

传进来的参数m不会修改x值的值。因为每次都是使用第一次返回的对象a来调用自己的函数,a内部引用的x的值一直是0。

 

后面的链式调用,每次调用完毕,都用本次调用的返回结果进行下次调用,每次调用完毕后,都会返回新的对象。这个新的对象内部引用的x的值都不是同一个。

除了第一次调用,后面的调用调用fun函数,都是内部的fun函数。

 

后面的代码我进行了改造,这样就更容易理解了。

修改后的代码,方便理解。

function fun(x,y){            console.log("fun(x,y),参数x="+x+",参数y="+y+",下一步输出y的值="+y);            console.log(y);            return{                innerFun:function(m){                    console.log("innerFun,x的值="+x);                    console.log("innerFun(m),参数m="+m);                    console.log("下一步调用fun(m="+m+",x="+x+")");                    return fun(m,x);                }            };        }                var a=fun(0);        console.log(a);        /*var a1=a.fun(1);        console.log(a1);        var a2=a.fun(2);        console.log(a2);        var a3=a.fun(3);        console.log(a3);        */                var b=fun(0).innerFun(1).innerFun(2).innerFun(3);

1, 代码fun(0)这步调用完毕后,产生了一个闭包,返回结果{innerFun: ƒ}引用了fun的变量x,x的值为0;

2,使用{innerFun: ƒ}调用innerFun函数,传入的参数1会在该函数内部调用fun函数时,作为参数x传过去,然后当fun函数执行完毕,再次产生闭包,该闭包引用fun的变量x,

  x的值为1;

  ………………

依次类推,使用返回结果{innerFun: ƒ}再次调用innerFun函数,然后内部调用fun函数,就会传递引用的x的值,然后输出引用的x的值,也就是上次调用的参数值。

 

转载于:https://www.cnblogs.com/Tpf386/p/11105002.html

你可能感兴趣的文章
Python操作MySQL数据库
查看>>
自动化部署之jenkins及简介
查看>>
CodeForces 1152D Neko and Aki's Prank
查看>>
Python 用pygame模块播放MP3
查看>>
inline必须在定义、实现都标记
查看>>
从单链表到循环链表
查看>>
百度招聘无处不在!
查看>>
丢失控制文件恢复实验记录--3(当前的控制文件损坏,归档日志文件损坏且备份的控制文件是旧的情况恢复数据库)...
查看>>
Ganglia监控MySQL
查看>>
反射和动态导入模块
查看>>
信息社会
查看>>
Mysql存储引擎概念特点介绍及不同业务场景选用依据
查看>>
关于Java类Calendar做统计时 获取日期的一些常见操作
查看>>
从程序员转向淘宝店主的探索
查看>>
openstack 中国联盟公开课參会总结
查看>>
约瑟夫环问题详解 (c++)
查看>>
Ubuntu 配置VNC以及使用VNC连接时,无法显示系统菜单栏,解决方法
查看>>
BZOJ.3990.[SDOI2015]排序(DFS)
查看>>
hdu 1358
查看>>
“-fembed-bitcode is not supported on versions of iOS prior to 6.0” 错误
查看>>