前端面试题

1.  

var f = function g() {

            return 23;
        };
        typeof g();

 
结果:Error
 
var f = function  {} 这样是一个函数表达式,
var f = function g() {}这样写不规范,浏览器会报错。
 
2.
var foo = {
            bar: function () {
                return this.baz;
            },
            baz: 1
        };
        (function () {
            return typeof arguments[0]();
        })(foo.bar);
 
结果:“undefined”
 
把 foo.bar 作为实参传给匿名函数,foo.bar() 相当于一个函数,这和普通的 函数名() 没有区别,而对于
     function test() { 
          alert(this)
     };
     test(); 
     上面这个和 window.test() 一样,所以这时候的this指向 window
       因为在 window 中找不到 baz 所以输出"undefined"
 
3.
var x = [typeof x, typeof y][1];
        console.log(typeof typeof x);
 
结果是 "string"
 
因为 typeof x 无论怎样最后都是返回的字符串。
 
另外 alert(x) 输出的是 "undefined"
 
注意: 
     var y = [1,2,3][1];
        console.log(y);     // 2
说明后面的那个 1 不是指数组长度而是指索引位置,最后返回的是数组中的某一项而不是一个数组。
 
对于
     var x = [typeof x, typeof y][0];
        console.log(x);     // undefined
        console.log(typeof x);      // string
难道是因为先预解析,这个时候是 x 是 undefined,而 typeof undefined 的值就是 undefined
 
4.
alert(function (x, undefined) {}.length);
 
结果:2
 
function a (num1,num2){ }
alert(a.length) // 2
函数名.length 输出的是形参长度
arguments.length输出的是实参长度
 
5.
function f() {
            return f;
        }
       new f() instanceof f;
结果:false
 
关键在于 那个 return f,new f() 最后其实是一个 f,而不是 f 的实例。
 
这里也说明 new f() 其实是执行了 一次 f 函数,所以才会返回 f ?
 
6.
(function f() {
            function f() {
                return 1;
            }
            return f();

            function f() {
                return 2;
            }
        })();
结果:2
函数声明会预解析,而
function f() {
            function f() {
                return 1;
            }
            function f() {
                return 2;
            }
        }
 
第二个会覆盖掉第一个 
 
7.
(function (foo) {
            return typeof foo.bar;
        })({
            foo: {
                bar: 1
            }
        });
 
结果:undefined
 
实参是
{
            foo: {
                bar: 1
            }
        }
里面只有 foo 这一个属性,没有 bar 属性,因此结果是"undefined"
 
8.
var x = 1;
        if (function f() {}) {
            x += typeof f;
        }
        x;
结果:"1undefined"
 
 if (function f() {}) 这样写是错误的,因此函数声明不能写在运算符中。但是注意 if() 的假值只有 false  , NAN , null , undefined , 0 , ""
这6个,对于其他的都是真,因此   if (function f() {}){}可以执行
 
9.
var f = (function f() {
            return "1";
        }, function g() {
            return 2;
        })();
        alert(typeof f);
 
结果:"number"
 
涉及到 分组选择符 这个知识。
var a = (1,2,3);
        alert(a) // 3
 
所以最后返回的是 2,number 型
 
10.
(function (x) {
            delete x;
            return x;
        })(1);
 
结果:1
 
注意 delete 的适用范围,只能删除对象下面的属性。
 
 
posted @ 2015-04-24 17:23  Bestend  阅读(153)  评论(0编辑  收藏  举报