1 找出数字数组中最大的元素(使用Math.max函数)
![]()
Math.max.apply(this, arr)
View Code
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)};
});
View Code
3 给object数组进行排序(排序条件是每个元素对象的属性个数)
![]()
objArray.sort(function(a,b){
return Object.keys(a).length-Object.keys(b).length;
});
View Code
4 利用JavaScript打印出Fibonacci数(不使用全局变量)
![]()
function Fibonacci(n) {
if(n==0||n==1){
return n;
}
return Fibonacci(n-1)+Fibonacci(n-2);
}
Fibonacci(5);
View Code
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;
}
View Code
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;
}
View Code
7 变量提升
if (!("a" in window)) {
var a = 1;
}
alert(a);
![]()
View Answer
8 变量对象
var a = 1,
b = function a(x) {
x && a(--x);
};
alert(a);
![]()
// [alert: 1]
// 优先级: 函数的形参 > 函数申明 > 变量申明
// 相当于函数表达式 b = function(x) {
// x && b(--x);
// };
View Answer
function a(x) {
return x * 2;
}
var a;
alert(a);
![]()
// alert: function a(x) {
// return x * 2;
// }
View Answer
var f = function g(){ return 23; };
typeof g;
![]()
// Uncaught ReferenceError: g is not defined
// (f)引用了函数,而(g)只在函数内部有意义
ViewAnswer
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个值是随时一样的,当然前提是这个索引值要小于传入的参数个数。
View Answer
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
![]()
// "undefined"
// this指向了arguments
View Answer
10 This
function a() {
alert(this);
}
a.call(null);
![]()
// alert: [object Window]
// 如果第一个参数传入的对象调用者是null或者undefined的话,call方法将把全局对象作为this的值。
View Answer
11 delete
(function(x){
delete x;
return x;
})(1);
![]()
// 1
// arguments和声明的变量、函数不能被delete删除,内部属性configurable的值为false
View Answer
12
var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;
![]()
// "number"
// 由逗号分隔的表达式,它们从左到右进行计算,但只有最后一个表达式的结果保存
View Answer
13
var x = 1;
if (function f(){}) {
x += typeof f;
}
x;
![]()
// ”1undefined“
// function f(){}返回值为undefined,为什么能进入判断?
View Answer
14
function f(){ return f; }
new f() instanceof f;
![]()
// false
// new f()===f;返回true
View Answer