这里是我到处搜集的一些JS题目,看起来比较简单,但对基础知识的考察还是很到位的。

有一些还可能是面试题。 题目的分析肯定会有不足的地方 ,如果能指正出来的话就再好不过了。不断更新中……

这里还有几个前端工程师面试题的文章 也一并推荐给大家

http://www.cnblogs.com/jscode/archive/2012/07/10/2583856.html#2425501

http://blog.jobbole.com/29269/


1.

var length = 9;
var foo = {bar: function() {return this.length;},length: 0
};
(function f(a, b) {f.length = 3;console.log(f.length);//①console.log(arguments[0]());//②console.log(a());//③console.log((foo.bar)());//④arguments[1]="XXX";console.log(b);//⑤
})(foo.bar ,33,11);

①f.length是Function f的形参数量 函数声明之后就不会变化了。
②执行时 arguments = [function(){return this.length;} , 33 , 11];
arguments[0]中的this指向的是arguments对象 而arguments.length 得到的是实参的个数(不管函数声明的时候有几个参数)
③a的获得相当于 var a = foo.bar;这时a的调用对象是window 而不是foo 。
④(foo.bar)() === foo.bar()这个就不细说了
⑤通过arguments能够改变实参的值

2.

用(0-9 A-Z a-z)生成任意长度(62位以内)的各个位都不重复的随机字符串

3.

function A(){alert(this);eval('alert(this)');(function(){alert(this);eval('alert(this)');})()
}
new A()
分别弹出什么?

4.

function A(){this.x=1;}
function B(){this.y=2;return "OK";}
function C(){this.z=3;return Object("OK");}
问:
new A();
new B();
new C();
三者分别是什么类型对象?(即用Object.getPrototypeOf(obj)获得的值)可参考另一篇文章《JS中用new 创建对象及在构造函数中return的使用》

5.

<script>//①if (!("a" in window)) {var a = 1;}alert(a);
//②function f(){if (!("b" in window)) {var b = 1;}alert(b);}f();
</script>

  全局变量是window的属性

  执行上下文分为进入执行上下文执行代码两部分。变量声明和函数声明在进入执行上下文阶段就已完成。

 要注意的一点是 ①和②答案的不同原因在于 a 声明的是全局变量 而b因为是在函数中,所以是局部变量。

6.

var a = 1;
alert(b);var b = function a(x) {x && a(--x);
}
alert(a);①这里的Function b 不是函数声明 而是函数表达式。所以只能在执行到代码的时候才会赋值。
②Function b 中的 a 只是匿名函数的别名,而且是个只能在 Function b里使用的局部变量。也就是说跟变量a没有关系,不会发生覆盖。

7.

var a = 1;
function a() { }
function b() { }
var b;
console.log(a);
console.log(b);//这里考察的是变量声明,变量赋值,函数声明的顺序:
//进入执行上下文后先进行函数声明,然后是变量声明,最后进行变量赋值。并且如果函数或变量已经存在,将不会重新声明。//也就是说,即使把变量声明并赋值写到函数声明前面,也还是会按照上面的顺序进行。
上面的代码等同于function a() { }function b() { }var a, b;a = 1;

8.

function A() {function m(){console.log(this);}this.test = function() {m.call(this);m.call(null);};
}
(new A()).test();//this值的定义:当一个方法在对象上调用的时候,this就指向到了该对象上
//m.call(this)的结果肯定是没问题的
//当call和apply的第一个参数是null或undefined时,参数将替换成window对象

9.
  找出某数字数组中的最大元素(使用Math.max函数)

var arr = [3,5,2,7,10,8];
①Math.max.apply([],arr);
②eval("(Math.max("+arr+"))");
这是目前看到的最好最简洁两种方案了,活用apply和eval
题外话:大家初学的时候都被告诫要“远离”eval,实际上,如果合理使用的话,eval绝对是把利器。

10.
  转化一个数字数组为function数组(每个function都弹出相应的数字)

var a = [2,4,6,3];
var b =a.map(function(i,o){return function(){return console.log(i);};
});

11.
  给object数组进行排序(排序条件是每个元素对象的属性个数)

var arr = [{A:32,B:2,C:5},{A:32},{A:32,B:2,C:5,D:7},{A:32,B:2,C:5}
];
arr.sort(function(m,n){function getPropCount(obj){var i=0;if(typeof obj == "object"){for(var p in obj){++i;}}return i;}return getPropCount(m) - getPropCount(n);
});

12.
  实现如下语法的功能:var a = (5).plus(3).minus(6); //5+3-6

Number.prototype.plus = function(num) {return this + num;
};
Number.prototype.minus = function(num) {return this - num;
};
console.log((5).plus(3).minus(6));这里 (5).plus(3).minus(6) 可以用 5..plus(3).minus(6)代替
但不可以用 5.plus(3).minus(6)
数字后面的第一个小数点是属于数字部分的,相当于 5.0.plus(3),第二个才是调用方法。
所以 5.plus()是会出错 而 5..plus()却可以

13.
  实现如下语法的功能:var a = add(2)(3)(4)(111).....; //2+3+4+111+... 可无限扩展的。

function add(x) {function fn(m) {fn.pValue = m + (fn.pValue || 0);return fn;};fn.pValue = x;fn.toString = fn.valueOf = function() {return fn.pValue;}return fn;
}
这里主要考察的是toString的重载。例如下面的例子
var arr = [1,3,5]
console.log(arr+""); // "1,3,5"
Array.prototype.toString=function(){return this.join("--");
}
console.log(arr+""); // "1--3--5"

:以上第五到第十四题的出处 http://dmitry.baranovskiy.com/post/91403200

没有标准答案。 我在这里给出的答案也只是自己觉得不错的答案而已。


14.

考点:with对作用域的影响

var x = 1;
(function() {var x = 2;function funcA() {console.log(this.x);}with ({funcB: function() { console.log(this.x); }, x: 3}) {function funcC() {console.log(this.x);}funcA();//?funcB();//?funcC();//?};
} ())


15
考点:setTimeout的执行时机

var A = true;
setTimeout(function(){A = false;
},1000);while(A){}alert("End");
//问:大约过多久会alert?

如果不清楚setTimeout中function的触发时机的话,这绝对是个大坑


接下来的若干题目整理自http://perfectionkills.com/javascript-quiz/

16.

(function(){return typeof arguments;})();1.“object”2.“array”3.“arguments”4.“undefined”

考点:arguments是类似于数组的对象,访问方式与数组相同

17.

var f = function g(){ return 23; };typeof g();“number”“undefined”
 “function”Error

g是f方法的别用,且只能在f方法的内部使用

18.

(function(x){delete x;return x;})(3);3 nullundefinedError

delete 只用于删除某个对象的属性,如果没有指定对象的话,则默认是window而这里面的形参x显然不是属性

19.

var y = 1, x = y = typeof x;
console.log(x);1“number”undefined“undefined”

考点:变量声明与赋值的时机

20.

 (function f(f){return typeof f();})(function(){ return 1; });“number”“undefined”“function”Error

21.

var foo = {bar: function() { return this.baz; },baz: 1
};
(function(){return typeof arguments[0]();
})(foo.bar);“undefined”“object”“number”“function”

22.

var foo = {bar: function(){ return this.baz; },baz: 1}
typeof (f = foo.bar)();“undefined”“object”“number”“function”

23.

var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;“string”“number”“function”“undefined”

24.

var x = 1;
if (function f(){}) {x += typeof f;
}
x;1“1function”“1undefined”NaN

这个答案在浏览器间存在差异

25.

var x = [typeof x, typeof y][1];
typeof typeof x;“number”“string”“undefined”“object”

26.

(function(foo){return typeof foo.bar;})({ foo: { bar: 1 } });“undefined”“object”“number”Error

这个问题是考眼力的。。。匿名函数的实参相当于 var arg = {foo:{bar:1}};所以在函数执行的时候 相当于
var arg = {foo:{bar:1}};return arg.bar;

27.

 (function f(){function f(){ return 1; }return f();function f(){ return 2; }
})();12Error (e.g. “Too much recursion”)undefined

考点:函数的声明与赋值时机

28.

function f(){ return f; }
new f() instanceof f;truefalse

相当于 f instanceof f;

29.

with (function(x, undefined){}) length;12undefinedError

乍看好像有点蒙  分解一下就好了

var f = function(x,undefined){};with(f){ length; } //这句再恢复一下就是 with(f){ return f.length;}


30.

console.log(Function instanceof Object);
var arr = [];
console.log(arr.constructor === Array.prototype.constructor);var num = new Number(2);
console.log(typeof num);

31.

(function(){var a=b=1;
})();
console.log(a);console.log(b);

a和b分别会输出什么呢?

这个问题的陷阱就是,在立即执行函数表达式(IIFE)中,有两个命名,但是其中变量是通过关键词var来声明的。这就意味着a是这个函数的局部变量。与此相反,b是在全局作用域下的。

这个问题另一个陷阱就是,在函数中他没有使用"严格模式" ('use strict';)。如果 严格模式 开启,那么代码就会报出未捕获引用错误(Uncaught ReferenceError):b没有定义。

记住,严格模式要求你在需要使用全局变量时,明确地引用该变量。因此,你需要像下面这么写:

(function(){'use strict';var a = window.b=1;
})();

转载于:https://www.cnblogs.com/TiestoRay/archive/2012/09/21/js_interview_questions.html

JavaScript面试题目集锦相关推荐

  1. BAT等公司高薪招聘Android开发面试题目集锦

    整理过的50道面试题目 1.listView的优化方式 重用convertView viewHolder static class viewHolder 在列表里面有图片的情况下,监听滑动不加载图片 ...

  2. 面试题目集锦--二叉树

          面试过程中,问的最多的题目大致是可以分为两类的,一类是链表,另一类就是二叉树了,树(普通数)和B(+-)树由于稍难些,问的不是很多.       往往在问到二叉树的时候,一般都是用递归的解 ...

  3. 面试题目集锦--链表

    前段时间一直在忙着找工作,在面试中也遇到了大量的算法题目,其中,问的比较多的是二叉树和链表之类的题目,在这里,我就把前段时间写的链表面试题贴出来,当然,由于题目很多,我只是在这里贴出它的类构造,不贴出 ...

  4. 转-python面试题目集锦(100道部分附答案)

    Python爬虫人工智能教程:www.python88.cn 编程资源网:www.python66.cn 最近收集整理了100道python真实面试笔试题,并自己做了一些,希望能帮助大家,顺利早日找到 ...

  5. 面试题目集锦 -- 排序算法

          面试过程中,免不了会问一些比较基础的问题,而这些基础的问题肯定要说到排序上去.       我们知道,排序算法包含插入,选择,冒泡,快速,归并,堆排序等等,大多时候,我们在面试的时候,最常 ...

  6. JAVA高频面试题目集锦

    一.equals()和==,以及HashCode() =号 如果是值引用,比较值是否相等: 如果是对象引用,比较对象内存地址是否相同 equals()方法中,默认使用等号,如果说我们想要判断对象是否相 ...

  7. C/C++面试题目集锦

    1.指针与引用的区别 从四个方面出发考虑不同点 (1)从定义出发,指针是一个变量,所存内容为指向变量在内存中的存储地址:而引用只是原变量的一个别名,和原变量占同一个存储单元. (2)初始化:指针可以初 ...

  8. 软件测试笔试、面试题目集锦

    一.单选题 1.软件测试是软件质量保证的重要手段,下述哪种测试是软件测试的最基础环节?(B)  A.集成测试 B.单元测试 C.目的测试 D.确认测试 单元测试是对最小可测试单元的检查和验证 2.测试 ...

  9. 2020社招前端VUE面试题目

    2020前端VUE面试题目集锦 年初由于疫情影响导致上家公司不景气,也由于自己一系列的考虑决定裸辞找工作,面试了十多家公司,最终进入了比较心仪的公司,我将这段时间面试所遇见的和VUE先关题目大概做个整 ...

最新文章

  1. python 搭建的http 动态服务器_Python 创建HTTP服务器的简单示例
  2. oracle 和 ' 特殊字符处理
  3. swift_028(Swift 的协议)
  4. 使用实体框架、Dapper和Chain的仓储模式实现策略
  5. js 查找当前元素/this
  6. 勿谈大,且看Bloomberg的中数据处理平台
  7. ES6使用object的is()方法比较两个值
  8. python群发短信脚本_python实现zabbix发送短信脚本
  9. excel柱状图堆叠图显示总和_Excel堆积柱形图同时显示合计值和构成值的方法介绍...
  10. python mysql数据库的高级应用_Python之路第十二天,高级(5)-Python操作Mysql,SqlAlchemy...
  11. fatal error C1083: Cannot open source file
  12. PyQt Graphics View 一个hello world例子
  13. 人生就是一次Presentation
  14. 常见python爬虫框架_python的爬虫框架有哪些
  15. 【毕业季·进击的技术er】大学生计算机毕业设计应该这样写
  16. 2.2.2-6-2 补码位乘法(Booth算法)
  17. PdfSharp库剪裁Pdf页面边缘空白部分
  18. week_07_数据库,JDBC,Utils,Html中文本,超链接,表格,表单,框架,图像标签
  19. matlab 符号 syms,matlab符号表达式求解:syms x y; m=x+y+1; x=[1 2 3]; y=[4 5 6]; 请问怎么求...
  20. 【动手学强化学习】DDPG+HER

热门文章

  1. [待解决]报错的脚本
  2. breakout room at teams
  3. success for advertisement
  4. 快速读书的方法(对于理工科的可能适用)
  5. easiest approach for improving writing skills for ielts
  6. Office 365:如何管理Office 365中的Ophaned Mailbox
  7. 通过SSH克隆远程仓库(GitLab)到本地
  8. 数论初步——同余与模算术
  9. liunx 下巧妙使用代理服务器(squid)
  10. 如何解决访问Windows Update网站时收到0X8024001D错误信息