关于JavaScript的一些笔试题
1.原题:
function Foo() {
getName = function () { alert (); };
return this;
}
Foo.getName = function () { alert ();};
Foo.prototype.getName = function () { alert ();};
var getName = function () { alert ();};
function getName() { alert ();}
//请写出以下输出结果:
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();
下面是我个人的分析:(先进行变量和函数的提升,在进行分析)
function Foo(){
getName = function(){//这里是函数表达式,但是没有使用var,执行的时候,会现在当前作用域查找有没有getName,如果有就返回,如果没有就想上找,直到直到全局作用域下,本例中,当前作用域没有,但是全局作用域中有var getName的声明,并且还有赋值,这个时候,会被他覆盖掉,变成getName = function(){console.log(1)};也就是覆盖了下面的getName = function(){console.log(4)};
console.log();
}
return this;
}
var getName;
// Foo().getName();
function getName(){console.log()};//函数声明,在函数提升的时候会把整个函数体提升
Foo.getName = function(){console.log()};//给Foo中创建了一个getName的属性,并赋值了一个匿名函数
Foo.prototype.getName=function(){console.log()};
getName = function(){console.log()};//这里是赋值操作,会覆盖40行的函数声明
Foo.getName();////访问Foo中的静态属性getName,也就是上面的赋值的匿名函数,所以输出的2
getName();//4因为45的赋值操作覆盖了42行的函数声明,顾输出的是4
Foo().getName();//1这里是这样操作的(Foo()).getName();我们可以看出Foo()属于window调用,this指向的就是window,
他返回的this就是window,所以这里就相当于window.getName();window调用的时候会在当前作用域下找有没有getName,如果有就执行,
这里全局环境的的赋值也就是getName = function(){console.log(4)};但是他已经被Foo中的getName覆盖了,变成了getName = function(){console.log(1)};
所以这里输出的就是1;(注意这些覆盖是发生在调用的时候);;这里涉及this的问题
getName();//1、、由于上面的操作,getName = function(){console.log(4)};已经被覆盖成了getName = function(){console.log(1)};
所以这里再直接访问getName()的时候,已经变了1
new Foo.getName();//2这里涉及的时候运算符的优先级,点的优先级高于new的优先级。所以先执行Foo.getName的操作,那就是输出2
new Foo().getName();//3这里也是优先级的问题,小括号的优先级最高,所以是(new Foo()).getName();那么就是先实例一个Foo的对象,然后去调用实例方法getName();
根据属性搜索原则,先去构造函数中找,没有就上原型中去找,这里构造函数Foo中没有,但是原型中已经添加了getName = function(){console.log(3)};所以这里输出的是3
new new Foo().getName();////还是优先级的问题,应该是new ((new Foo()).getName)();先实例化Foo,在将Foo原型中的getName当成构造函数,
继续实例化,然后调用
// 这里我们写一个小demo
function fn(){
setName = function(){console.log()};
}
fn.prototype.setName= function(){console.log()};
// new new fn().setName();
// console.log(new((new fn()).setName)());
new((new fn()).setName)();
2.获取100 - 1000之内的左右水仙花数
var daffodil = () => {
var temp = []
var x,y,z,sum
for (var i = 100; i < 1000; i++) {
x = parseInt(i / 100)
y = parseInt(i % 100 / 10)
z = parseInt(i % 100 % 10)
sum = Math.pow(x, 3) + Math.pow(y, 3) + Math.pow(z, 3)
if (i == sum) {
temp.push(i)
}
}
return temp
}
var x = daffodil()
console.log(x)
关于JavaScript的一些笔试题的更多相关文章
- ThoughtWorks西邮暑期特训营 -- JavaScript在线笔试题
ThoughtWorks 公司在西邮正式开办的只教女生前端开发的女子卓越实验室已经几个月过去了,这次计划于暑期在西邮内部开展面向所有性别所有专业的前端培训. 具体官方安排请戳:ThoughtWorks ...
- 从阿里巴巴笔试题看Java加载顺序
一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...
- 我设计的ASP.NET笔试题,你会多少呢
本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...
- 也许你需要点实用的-Web前端笔试题
之前发的一篇博客里没有附上答案,现在有空整理了下发出来,希望能帮助到正在找工作的你,还是那句话:技术只有自己真正理解了才是自己的东西,共勉. Web前端笔试题 Html+css 1.对WEB标准以及w ...
- Web前端面试笔试题总结
最近一段时间要毕业了,忙着找工作,见过不少笔试面试题,自己总结了一些加上网上找的一些整合了一下.答案暂时都东拼西凑出来了,但是还是先不发出来,一方面是答案并不是唯一的并且自己的答案不能保证对,另一方面 ...
- 一道灵活的css笔试题
今天在网上看到一css笔试题,乍一看很简单,实则内部暗藏玄机,题目大概是:九宫格,每格长宽50px,边框宽度5px,鼠标经过边框变红,效果如下: 鼠标路过时: 以下是代码(如有不足之处望多加指正) & ...
- PHP笔试题(转载)
整理了一份PHP高级工程师的笔试题,问题很全面.嗯,基本上这些题都答得不错,那么你应该可以胜任大部分互联网企业的PHP职位了.下面直接上题. 1. 基本知识点 HTTP协议中几个状态码的含义:503, ...
- 收藏所用C#技术类面试、笔试题汇总
技术类面试.笔试题汇总 注:标明*的问题属于选择性掌握的内容,能掌握更好,没掌握也没关系. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化,不要梦想着把题覆盖了,下面的题是供大家查漏补 ...
- Android开发面试经——4.常见Android进阶笔试题(更新中...)
Android开发(29) 版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...
随机推荐
- EasyUI Tree 树
转自:http://www.jeasyui.net/plugins/185.html 通过 $.fn.tree.defaults 重写默认的 defaults. 树(tree)在网页中以树形结构显示分 ...
- bzoj 1594: [Usaco2008 Jan]猜数游戏【二分+线段树】
写错一个符号多调一小时系列-- 二分答案,然后判断这个二分区间是否合法: 先按值从大到小排序,然后对于值相同的一些区间,如果没有交集则不合法:否则把并集在线段树上打上标记,然后值小于这个值的区间们,如 ...
- 清北考前刷题day4早安
LI /* 没有考虑次大值有大于一个的情况 */ #include<iostream> #include<cstdio> #include<cstring> # ...
- (斯特林公式)51NOD 1058 N的阶乘的长度
输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. Input 输入N(1 <= N <= 10^6) Output 输出N的阶乘的长度 Input示例 6 Out ...
- 牛客练习赛17-A-长方体
题目描述 给出共享长方体一个顶点的三个面的面积,求它十二条边的边长和. 输入描述: 一行三个整数a, b, c表示面积(1 <= a, b, c <= 10000). 输出描述: 一行一个 ...
- Office Excel的几个快捷键记录
Office Excel的几个快捷键记录: 切换Sheet:CTRL + PageUP/PageDown 另存为:F12
- js实现水波纹背景
<!DOCTYPE html> <html> <head> <title>水波背景</title> <meta charset=&qu ...
- ActiveMQ命令行工具
命令行工具 命令行工具 n activemq——运行activemq代理 n activemq-admin——管理代理的实例 在5.0之前activemq-admin被分成多个脚本,例如 ...
- ES6 学习笔记 - let和const
let 和 const 命令 学习资料:ECMAScript 6 入门 let 所声明的变量,只在let命令所在的代码块内有效.用途:循环计数器. 如果使用var,只有一个全局变量i: var a = ...
- Django--2、form表单
django中定义form表单的优势 HTML中提交后,若数据出现错误,返回的页面中仍然可以保留之前输入的数据. 通过校验规则可以方便的限制字段条件并校验. 在Django中建个form表单 先要确定 ...