javascript面试题代码:

<script type="text/javascript">
function fun(x,y){
console.log("log====fun外部x值="+x+",y的值="+y+"下一步输出y的值="+y);
console.log(y);
return{
fun:function(m){
console.log("x的值="+x);
console.log("fun内部x值="+x+",m的值="+m+"m是下一步的参数值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).fun(1).fun(2).fun(3); console.log(fun(0));
console.log(fun(0).fun(1));
console.log(fun(0).fun(1).fun(2));
console.log(fun(0).fun(1).fun(2).fun(3)); </script>

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

调试下两行代码:

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的值,也就是上次调用的参数值。

一个javascript面试题的更多相关文章

  1. 前端程序员经常忽视的一个JavaScript面试题

    在网上找到一个有关JavaScript的面试题,特整理如下: function Foo() { getName = function () { alert (1); }; return this; } ...

  2. 前端程序员经常忽视的一个 JavaScript 面试题

    题目 function Foo() { getName = function () { alert (1); }; return this; } Foo.getName = function () { ...

  3. 前端同学经常忽视的一个 JavaScript 面试题

    题目 function Foo() {     getName = function () { alert (1); };     return this; } Foo.getName = funct ...

  4. 一个javascript面试题解析

    ; function fn(){ console.log(this.length); } var obj = { length: , method: function (fn) { fn(); // ...

  5. 174道 JavaScript 面试题,助你查漏补缺

    最近在整理 JavaScript 的时候发现遇到了很多面试中常见的面试题,本部分主要是作者在 Github 等各大论坛收录的 JavaScript 相关知识和一些相关面试题时所做的笔记,分享这份总结给 ...

  6. 你应该知道的25道Javascript面试题

    题目来自 25 Essential JavaScript Interview Questions.闲来无事,正好切一下. 一 What is a potential pitfall with usin ...

  7. 互联网中级Javascript面试题

    互联网中级Javascript面试题 1.实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number.String.Object.Array.Boolean)进行值复制 ...

  8. 互联网公司前端初级Javascript面试题

    互联网公司前端初级Javascript面试题 1.JavaScript是一门什么样的语言,它有哪些特点?(简述javascript语言的特点)JavaScript是一种基于对象(Object)和事件驱 ...

  9. 一道 JavaScript 面试题

    有一道 JavaScript 面试题. f = function () { return true; }; g = function () { return false; }; (function() ...

随机推荐

  1. DevOps - 虚拟环境构建工具Vagrant

    1 - Vagrant HomePage: https://www.vagrantup.com/ Download: https://www.vagrantup.com/downloads.html ...

  2. DRF视图-请求与响应

    DRF视图 drf的代码简写除了在数据序列化体现以外,在视图中也是可以的.它在django原有的django.views.View类基础上,drf内部封装了许多子类以便我们使用. Django RES ...

  3. 一些常见的MySQL配置

    目录 配置 参考 配置 [mysqld] port = 3306 socket = /mysql/log/mysql_3306.sock # mysql的目录(即mysql的文件所在目录) # bas ...

  4. JS触发事件集锦

    事件句柄 HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时启动一段 JavaScript.下面是一个属性列表,这些属性可 ...

  5. Linux文件属性之用户与用户组基础知识回顾

    回顾: 用户.用户组的概念: 每个文件和进程,都需要对应一个用户和用户组. linux系统通过UID和GID来识别用户和组的. 用户名相当于人名 UID和GID  身份证号 管理员:root   do ...

  6. Second largest node in the BST

    Find the second largest node in the BST 分析: 如果root有右节点,很明显第二大的node有可能在右子树里.唯一不满足的条件就是右子树只有一个node. 这个 ...

  7. 基于Springboot后台,前台 vue.js 跨域 Activiti6 工作流(用到websocket技术) 的项目

    工作流模块----------------------------------------------------------------------------------------------- ...

  8. Codeforces 1239C. Queue in the Train

    传送门 事实上就是模拟 搞一个优先队列维护一下事件结构体:时间,人的编号,入队还是出队 再维护两个 $set$ ,队列内的人 $inQueue$ ,想要进入队列内的人 $want$ 然后模拟模拟模拟! ...

  9. RHEL8运维新利器--Cockpit使用方法

    在web浏览器中查看服务器并使用鼠标执行系统任务,很容易管理存储.配置网络和检查日志等操作. # 安装cockpit yum -y install cockpit # 启用cockpit system ...

  10. 怎样使 html 文本文字不能被选中?

    -webkit-user-select:none; -moz-user-select:none; -ms-user-select:none; user-select:none;