有意思的前端函数面试题

1:考引用类型在比较运算符时候 隐式转换会调用本类型那个方法 toString和valueOf?(去年过年吵的很火国外的题)


if(a == 1 && a == 2 && a == 3){console.log("我走进来了");
}<!--答案1:-->
var a = {num:0};
a.valueOf = function(){return   a.num
}<!--答案2:-->
var num = 1;
function a(){return num  ;
}
if(a() == 1 && a() == 2 && a() == 3){console.log("我走进来了");
}<!--答案3:-->var num = 0;
Function.prototype.toString = function(){return   num;
}
function a(){}<!--答案4:-->
var  a = {[Symbol.toPrimitive]: ((i) => () =>   i) (0)};

2:考this指向的理解?(最后一个输出问题是借鉴网易面试题的)

var names = "宋伟老师";
var obj = {names:"张健老师",showName:function(){console.log(this.names);},returnName:function(){return this.names;},returnFunctionName:function(){return function(){console.log(this.names);}}}
obj.showName();                                     //输出什么?   "张健老师"
obj.returnName();                                   //输出什么?   "张健老师"
obj.returnFunctionName()();                         //输出什么?   "宋伟老师"
obj.showName.call(names);                           //输出什么?   undefined
obj.returnName.call(names);                         //输出什么?   undefined
obj.returnFunctionName().call(names)                //输出什么?   undefined
var newObj = obj.returnFunctionName().bind(window);
newObj.call(obj)                                    //输出什么?   "宋伟老师"
//为什么最后一个输出"宋伟老师"?因为bind指向this对象后  再一次调用的话  this指向不会被改变//谢谢某同学慧眼发现了问题  name少了个s 统一都是names

3:再来一次this指向问题?(能不看答案的同学说出结果 算我输)

var big = "万达老师";var obj = {big:"宋伟老师",showBig:function(){return this.big;}
}
obj.showBig.call(big);          //ƒ big() { [native code] }  //精通String的操作方法的同学就把为什么回复出来吧

4:说出下面this长度是多少?(再来一把this指向 估计能把这都搞明白的同学 this指向应该没有能难住的了)


function a(a,b,c){console.log(this.length);                 //4console.log(this.callee.length);          //1
}function fn(d){arguments[0](10,20,30,40,50);
}fn(a,10,20,30);//第一个输出结果:因为this当前指向的是arguments 。 arguments是一个伪数组具备length属性。arguments又是保存函数的实参。
fn调用的时候传入4个实参。所以arguments长度为4。这个时候arguments[0] 等同于 arguments.a调用这个函数。所以this指向的是arguments这个伪数组也是(对象)(听到这还有疑惑小伙伴留言问我)//第二个输出结果:callee是arguments的一个属性,主要返回当前arguments直属的函数体。所以this.callees是返回fn 。每一个函数有一个length属性主要用来返回函数的形参的所以就是1。

5:经典的变量提升问题?


===================  题一 ===========================
if(!"abc"  in window){var abc = 10;
}
console.log(abc);   	        //undefined  
//因为先变量声明提升 所以提升之后abc的值系统默认会赋值为undefined。 !abc为false ,in是检查对象中是否存在某个属性。很显然 false属于是一个布尔类型。不存在对象中。所以没有走if里面的变量赋值。//对于wens同学提出的问题。我重新说明一下abc虽然声明提升了。
但是  if里面判断的是字符串abc。所以!"abc"false。
你可以尝试if(!"abc"){var abc=10} console.log(abc);
再试试if(!abc){var abc=10} console.log(abc);看看结果是否一样===================  题二 ===========================    
console.log(a);                 //undefined
if(!("a" in window)){var a = 10;
}
console.log(a);                 //undefined
//因为先变量声明提升 所以提升之后a的值系统默认会赋值为undefined。 变量提升会存在GO中也就是window。所以("a" in window)肯定为true。!去反一下就为false。所以不走赋值。
===================  题三 ===========================
var x = 1;
if (function f(){}) {
x  = typeof f;  
}
console.log(x);                 //1undefined   
//因为函数题在()中会以表达式去运行。最后转换为true,不会存在函数整体声明提升。所以typeof为undefined

6:面试几率百分80%的题!

function fun(n,o) {console.log(o)return {fun:function(m){return fun(m,n);}};
}
var a = fun(0); a.fun(1); a.fun(2); a.fun(3);		    //输出什么 undefined 0 0 0 
var b = fun(0).fun(1).fun(2).fun(3);				    //输出什么 undefined 0 1 2
var c = fun(0).fun(1); c.fun(2); c.fun(3);			    //输出什么 undefined 0 1 1//答案很显而易见。换一个形式看着道题function fun(n,o) {console.log(o)return {fun:function(m){return fun(m,n);}};
}
var a = fun(0); a.fun(1); a.fun(2); a.fun(3);		    //输出什么 undefined 0 0 0 //fun(0)调用时候等同于
function fun(n,o) {var n=0;var o;console.log(o)  //undefinedreturn {fun:function(m){return fun(m,n);  ---> n 就获取到fun里面的n为0的值。然后调用一次fun就会出现下面函数显示。}};
}
//a.fun(1)调用时候等同于fun(1,0)
function fun(n,o) {var n=1;var o=0;console.log(o)  //1return {fun:function(m){return fun(m,n);  ---> n 就获取到fun里面的n为0的值。}};
}//以此类推  不知道小伙伴们看懂没 因为感觉语言解释不如分化代码理解好明白

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用java写个简单的直播强求_全网最简单易懂的Netty入门示例,再不会用Netty我直播吃翔...

//server引导类ServerBootstrap serverBootstrap new ServerBootstrap();//boss 对应 IOServer.java 中的接受新连接线程,主要负责创建新连接NioEventLoopGroup boss new NioEventLoopGroup();//worker 对应 IOServer.java 中的负责读取数据的线程,主要用于读取数据以及业务逻…

XamarinAndroid组件教程设置自定义子元素动画(一)

XamarinAndroid组件教程设置自定义子元素动画(一) 如果在RecyclerViewAnimators.Animators中没有所需要的动画效果&#xff0c;就可以自定义一个。此时&#xff0c;需要让自定义的动画继承BaseItemAnimator抽象类。 【示例1-2】下面以RecylerViewAnimatorsItemAnimator项目为基…

使用Storm进行可扩展的实时状态更新

在本文中&#xff0c;我将说明如何借助Storm框架以可扩展且无锁定的方式在数据库中维护实时事件驱动流程的当前状态。 Storm是基于事件的数据处理引擎。 它的模型依赖于基本原语&#xff0c;例如事件转换&#xff0c;过滤&#xff0c;聚合……&#xff0c;我们将它们组合成拓扑…

python关于字典嵌套字典,列表嵌套字典根据值进行排序

python 对于字典嵌套字典&#xff0c; 列表嵌套字典排序 例&#xff1a;列表嵌套自字典&#xff1a;d [{"name": 张三, s: 68}, {name: 李四, s: 97}] 对于列表嵌套字典可以使用python的sorted()方法&#xff0c;也可以使用list的sort()方法&#xff1a; sorted方法…

【干货】十分钟读懂浏览器渲染流程

在之前写过的一篇《"天龙八步"细说浏览器输入URL后发生了什么》一文中&#xff0c;和大家分享了从在浏览器中输入网址URL到最终页面展示的整个过程。部分读者向我反馈对于最后的浏览器渲染布局这块不是很清晰&#xff0c;所以本文就浏览器渲染流程单独开篇讲解&#…

控制台资费管理主菜单java_java毕业设计_springboot框架的高速公路收费管理系统...

今天介绍一个java毕设题目, 题目内容为springboot框架的高速公路收费管理系统, 是一个采用b/s结构的javaweb项目, 采用java语言编写开发工具eclipse, 项目框架jspspringbootmybatis, 高速公路收费管理系统的信息存储于mysql中, 并基于mybatis进行了orm封装, 该高速公路收费管理…

Hibernate框架的搭建和一个简单的实例

Hibernate是一个支持对JDBC进行封装的框架&#xff0c;实现了对底层数据库访问的封装。非常适合使用和开发。首先需要下载Hibernate&#xff0c;可以在这个网站下载最新包。http://www.hibernate.org/然后打开他的目录结构&#xff0c;将lib目录下的required目录下的包全部导入…

在Amazon EMR上运行Hadoop MapReduce作业

不久前&#xff0c;我发布了如何使用CLI设置EMR群集的信息。 在本文中&#xff0c;我将展示如何使用适用于AWS的Java SDK来设置集群。 展示如何使用Java AWS开发工具包执行此操作的最佳方法是展示完整的示例&#xff0c;因此&#xff0c;让我们开始吧。 设置一个新的Maven项目…

在商城系统开发时遇到商品的多级分类,为增强扩展性,子类可以任意添加,此类问题数据库如何设计...

表结构为&#xff1a; id&#xff08;编号&#xff09; name&#xff08;分类名&#xff09; parentID&#xff08;父类编号&#xff09; 简单举例如下&#xff1a; id name parentID 1 饮料 0&#xff08;为0表示第一大类&#xff09; 2 水果 …

[JSConf EU 2018] 大脑控制 Javascript

先解释&#xff0c;本人为前端菜鸟&#xff0c;之前也未参加过类似的活动&#xff0c;没有翻译过什么文章&#xff0c;此次是好奇心使然&#xff0c;也是想尝试下&#xff0c;学习学习&#xff0c;英文很烂&#xff0c;全靠有道&#xff0c;但是视频整个看下来&#xff0c;还是…

init tarray 太大_[NOIP 2001提高组T4]Car的旅行路线

[题目来源]&#xff1a;NOIP2001提高组T4[关键字]&#xff1a;最短路径[题目大意]&#xff1a;给定平面直角若干个矩形&#xff0c;计算(可经过其他矩形)两个矩形任意顶点间的最短路程费用。//[分析]&#xff1a;其实题目本事没有太大的难点&#xff0c;只需要对每两个点进行连…

Caffe Caffe2入门博客存档

caffe2 教程入门&#xff08;python版&#xff09; https://www.jianshu.com/p/5c0fd1c9fef9?fromtimeline caffe入门学习 https://blog.csdn.net/hjimce/article/details/48933813 运行caffe自带的两个简单例子 https://www.linuxidc.com/Linux/2016-11/136774p9.htm 关于caf…

JavaScript中不得不说的断言?

断言主要应用于“调试”与“测试” 一、前端中的断言 仔细地查找一下JavaScript中的API&#xff0c;实际上并没有多少关于断言的方法。唯一一个就是console.assert&#xff1a; // console.assert(condition, message)const a 1console.assert(typeof a number, a should be…

Java EE状态会话Bean(EJB)示例

在本文中&#xff0c;我们将了解如何在简单的Web应用程序中使用状态会话Bean来跟踪客户端会话中的状态。 1.简介 有状态会话Bean通常保存有关特定客户端会话的信息&#xff0c;并在整个会话中保留该信息&#xff08;与无状态会话Bean相对&#xff09;。 有状态EJB实例仅与一个…

计算机科学速成课16:软件工程

概念&#xff1a;建造标准或者大型软件的方法和工具代码打包成函数 面向过程函数打包成对象 面向对象对象层层打包Car.Engine.CruiseControl.SetCruiseSpeed(55)应用程序接口api集成开发环境IDE&#xff1a;code&#xff0c;整理&#xff0c;编译&#xff0c;测试注释和readme文…

牛客网NOIP赛前集训营-提高组(第六场)B-选择题[背包]

题意 题目链接 分析 直接背包之后可以 \(O(n)\) 去除一个物品的影响。注意特判 \([p1]\) 的情况。总时间复杂度为 \(O(n^2)\) 。代码 #include<bits/stdc.h> using namespace std; #define go(u) for(int ihead[u],ve[i].to;i;ie[i].last,ve[i].to) #define rep(i,a,b) f…

起点海外版 Hybrid App-内嵌页优化实践

本文作者&#xff1a;刘文涛 原创声明&#xff1a;本文为阅文前端团队 YFE 成员出品&#xff0c;请尊重原创&#xff0c;转载请联系公众号 (id: yuewen_YFE) 获取授权&#xff0c;并注明作者、出处和链接。 今年年初我司开启了起点品牌的海外之旅&#xff0c;名为「 Webnovel 」…

aix 卸载mysql_AIX 删除数据库及集群软件

一、 删除数据库1、用dbca自动删库在CRT上无法打开dbca图形界面&#xff0c;要安装一个Xmanage软件&#xff0c;用Xstart连接终端&#xff0c;并修改oracle用户的.profile&#xff0c;加上“export DISPLAY192.168.8.120:0.0”Xstart配置信息如下&#xff1a;2、手工删除数据库…

简单轻量级池实现

对象池是包含指定数量的对象的容器。 从池中获取对象时&#xff0c;在将对象放回之前&#xff0c;该对象在池中不可用。 池中的对象具有生命周期&#xff1a;创建&#xff0c;验证&#xff0c;销毁等。池有助于更好地管理可用资源。 有许多使用示例。 特别是在应用程序服务器中…

如何在github中的readme.md加入项目截图

1. 先在之前的本地项目文件夹里创建一个存放截图的文件夹。&#xff08;如img文件夹&#xff09; 2. 将新增的内容通过github desktop上传到github中 3. 在github中立马能看到刚刚上传的图片&#xff0c;打开图片&#xff0c;点击Download 4. 直接复制地址栏的网址 5. 最后在RE…