1 找出数字数组中最大的元素(使用Math.max函数)
Math.max.apply(this, arr)
2 转化一个数字数组为function数组(每个function都弹出相应的数字)
for(var i=0;i<arr.length;i++){ ???var tmp=arr[i]; ???arr[i]=function(tmp){ ???????return function(){ ???????????alert(tmp); ???????} ???}(tmp)}或者arr.map(function(e){ ???return function(){alert(e)};});
3 给object数组进行排序(排序条件是每个元素对象的属性个数)
objArray.sort(function(a,b){ ???return Object.keys(a).length-Object.keys(b).length;});
4 利用JavaScript打印出Fibonacci数(不使用全局变量)
function Fibonacci(n) { ???if(n==0||n==1){ ???????return n; ???} ???return Fibonacci(n-1)+Fibonacci(n-2);}Fibonacci(5);
5 实现如下语法的功能:var a = (5).plus(3).minus(6); //2
Number.prototype.plus=function(n){ ???return this+n;}Number.prototype.minus=function(n){ ???return this-n;}
6 实现如下语法的功能:var a = add(2)(3)(4); //9
//判断返回的是函数还是值function add(n){ ???var f=function(m){ ???????return add(n+m); ???}; ???f.toString=f.valueOf=function(){ ???????return n; ???}; ???return f;}
7 变量提升
if (!("a" in window)) { ???var a = 1;}alert(a);
//[alert: undefined]
8 变量对象
var a = 1, ???b = function a(x) { ???????x && a(--x); ???};alert(a);
// [alert: 1]// 优先级: 函数的形参 > 函数申明 > 变量申明// 相当于函数表达式 ??b = function(x) {// ???????x && b(--x);// ???};
function a(x) { ???return x * 2;}var a;alert(a);
// alert: function a(x) {// ????return x * 2;// }
9 Arguments对象
function b(x, y, a) { ???arguments[2] = 10; ???alert(a);}b(1, 2, 3);function b(x, y, a) { ???arguments[2] = 10; ???alert(a);}b(1, 2);
// alert: 10 和 alert:undefined// properties-indexes 的值和实际传递进来的参数之间是共享的。// 这个共享其实不是真正的共享一个内存地址,而是2个不同的内存地址,使用JavaScript引擎来保证2个值是随时一样的,当然前提是这个索引值要小于传入的参数个数。
10 This
function a() { ???alert(this);}a.call(null);
// alert: [object Window]// 如果第一个参数传入的对象调用者是null或者undefined的话,call方法将把全局对象作为this的值。
44道JS难题
js笔试题(不定期更新)
原文地址:http://www.cnblogs.com/wanghuohuo/p/7424130.html