JS14道经典面试题

时间:2021-02-26 14:19:34
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
/*
* 第一题:
* typeof 的返回值只有以下6种,且都是字符串
* number,boolean,string,object,function,undefined
* 由于 arguments是个对象,所以返回 "object"
* */

/*(function(){
alert(typeof arguments); // object
})();*/



/*
* 第二题:
* 在函数表达式中,一个变量后跟一个匿名函数,注意没有名字
* 这里会直接报错
* */

/*var f = function g(){ return 23; };
alert(typeof g()); // error*/


/*
* 第三题:
* delete 可以删除一个对象自有属性中的属性
* 题中的x是一个参数,无法删除,但是也不会报错
* 因此返回的是1
* */

/*(function(x){
delete x;
alert(x);
})(1);*/



/*
* 第四题:
* typeof y,这时的y并不存在,因此 x = y = typeof x = "undefined"
* 返回 "undefined"
* */

/*var y = 1, x = y = typeof x;
alert(x);*/


/*
* 第五题:
* 传人的参数 function () {return 1} 是一个函数
* 即f为函数,f()调用函数,返回的是1
* typeof 1 返回的是 "number"
* */

/*(function f(f){
alert(typeof f());
})(function(){ return 1; });*/


/*
* 第六题:
* foo.bar = function() { return this.baz; }
* 闭包中将 foo.bar 作为一个整体传入,
* arguments[0]就代表foo.bar,并且调用执行
* foo.bar中的this.baz中的this代表的是 [object Arguments]
* this.baz 不存在,返回undefined
* */

/*var foo = {
bar: function() {
// alert(this); // [object Arguments]
alert(this.baz);
},
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);*/



/*
* 第7题:
* 这题和上一题同理,
* f = foo.bar = function(){ return this.baz; },
* foo.bar作为一个整体被传入到匿名函数中去
* 即 a = typeof (function(){return this.baz; })();
* (function(){return this.baz; })()自动调用,this指向[object Window]
* 因此this.baz不存在,typeof 返回的为 "undefined"
* */

/*var foo = {
bar: function(){ return this.baz; },
baz: 1
}
var a = typeof (f = foo.bar)();
alert(a);
*/




/*
* 第8题:
* 像(1,2,3)这种带","的表达式,返回的值为最后一个值
* 因此 var f = (function f(){ return "1"; }, function g(){ return 2; })();
* 即 (function g(){ return 2; })();
* 执行的效果为调用 g()函数,这是返回的为2
* 因此 typeof f 为 'number'
* */

/*// var a = (1,2,3);
// alert(a); // 3

var f = (function f(){ return "1"; }, function g(){ return 2; })();
alert(typeof f);*/












/*
* 第9题:
* 布尔值为false的五种情况:
* 数字0、特殊值的 null、NaN、undefined、字符串""
* if(function f(){}) 返回的为true
* 且在if()语句中的()中定义函数无效
* 因此 typeof f 返回的为字符串 "undefined"
* x += "undefined",返回的为"1undefined"
* */


/*var x = 1;
if (function f(){}) {
x += typeof f;
}
alert(x);*/






/*
* 第10题:
* 无论var x = [typeof x, typeof y][1];返回的是什么,
* typeof x返回的是字符串
* typeof typeof x 返回的是 "string"
* */

/*var x = [typeof x, typeof y][1];
alert(typeof typeof x);*/



/*
* 第11题:
* 传入的参数是 foo = { foo: { bar: 1 } }
* foo.bar 不存在,为undefined
* typeof foo.bar 为 "undefined"
* */

/*(function(foo){
alert(typeof foo.bar);
})({ foo: { bar: 1 } });*/



/*
* 第12题:
* 函数声明会被提前执行,即执行顺序为①->->
* 因为①③定义了同一个函数,所以③会覆盖①
* 则f()返回的为2
* */

/*(function f(){
function f(){ return 1; } //
alert(f()); //
function f(){ return 2; } //
})();*/









/*
* 第13题:
* 当构造函数有返回值时,new 构造函数的原型就不是自己构造函数的原型
* 所以new f() instanceof f返回为false
* */

/*function f(){ return f; }
alert(new f() instanceof f);*/





/*
* 第14题:
* 函数的length属性返回的是形参的个数
* 实参的个数则用 arguments.length表示
* 所以返回2
* */

/*with (function(x, undefined){}) {
alert(length);
}*/





/*
* 第7题:
* */














</script>
</body>
</html>