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; // }
var f = function g(){ return 23; }; typeof g;
// Uncaught ReferenceError: g is not defined // (f)引用了函数,而(g)只在函数内部有意义
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个值是随时一样的,当然前提是这个索引值要小于传入的参数个数。
var foo = { bar: function() { return this.baz; }, baz: 1 }; (function(){ return typeof arguments[0](); })(foo.bar);
// "undefined" // this指向了arguments
10 This
function a() { alert(this); } a.call(null);
// alert: [object Window] // 如果第一个参数传入的对象调用者是null或者undefined的话,call方法将把全局对象作为this的值。
11 delete
(function(x){ delete x; return x; })(1);
// 1 // arguments和声明的变量、函数不能被delete删除,内部属性configurable的值为false
12
var f = (function f(){ return "1"; }, function g(){ return 2; })(); typeof f;
// "number" // 由逗号分隔的表达式,它们从左到右进行计算,但只有最后一个表达式的结果保存
13
var x = 1; if (function f(){}) { x += typeof f; } x;
// ”1undefined“ // function f(){}返回值为undefined,为什么能进入判断?
14
function f(){ return f; } new f() instanceof f;
// false // new f()===f;返回true