• 前端开发面试题收集(js部分)


    1.问:js中"1"+2+"3"+4 运算结果是?

    答:1234

    js中,字符串和数值相加,得到的还是字符串,这里的结果1234也是字符串。

    2.问:4+3+2+"1"  运算结果是?

    答:91 (从左至右的运算,前面是数值相加得到9,再和字符串相加得到91字符串。)

    3.问:以下代码中,结果是?

    复制代码
    var foo = 1;
    function bar() {
        foo = 10;
        return;
        function foo() {}
    }
    bar();
    alert(foo);
    复制代码

    答:将输出1.  (这里访问的是window.foo,而不是bar里面的foo)

    4.问:以下代码中,结果是?

    复制代码
    function bar() {
        return foo;
        foo = 10;
        function foo() {}
        var foo = 11;
    }
    alert(typeof bar());
    复制代码

    答:将输出function.(var foo = 11 虽然定义放在后面,但是变量会提升,所以最后的结果是function)

    5.问:以下代码中,结果是?

    复制代码
    var x = 3;
    var foo = {
        x: 2,
        baz: {
            x: 1,
            bar: function() {
                return this.x;
            }
        }
    }
    var go = foo.baz.bar;
    alert(go()); 
    alert(foo.baz.bar());
    复制代码

    答:3,1.

    go = foo.baz.bar; go()此时this指向的是widow. window.x的值是3;foo.baz.bar()此时this指向的是baz,baz.x的值是1.

    6.问:以下代码中,结果是?

    复制代码
    var x   = 4,
        obj = {
            x: 3,
            bar: function() {
                var x = 2;
                setTimeout(function() {
                    var x = 1;
                    alert(this.x);
                }, 1000);
            }
        };
    obj.bar();
    复制代码

    答:输出4.

    setTimeout方法是挂在window对象下的。setTimeout(匿名函数,time),这里的匿名函数形成了一个闭包,从而能访问到外层函数的局部变量。也就是window中的x。(参考

    7.问:以下代码中,结果是?

    复制代码
    x = 1;
    function bar() {
        this.x = 2;
        return x;
    }
    var foo = new bar();
    alert(foo.x);
    复制代码

    答:输出2.

    这里的this指向的是bar的对象实例。

    8.问:以下代码中,结果是?

    function foo(a) {
        alert(arguments.length);
    }
    foo(1, 2, 3);

    答:3.

    9.问:以下代码中,结果是?

    var foo = function bar() {}; 
    alert(typeof bar);

    答:undefined

    10.问:以下代码中,结果是?

    var arr = [];
    arr[0]  = 'a';
    arr[1]  = 'b';
    arr.foo = 'c';
    alert(arr.length);

    答:2, 输出arr的值是["a", "b"],不是很懂这里的结果。

    11.问:以下代码中,结果是?

    function foo(a) {
        arguments[0] = 2;
        alert(a);
    }
    foo(1);

    答:2

    12.问:以下代码中,结果是?

    function foo(){}
    delete foo.length;
    alert(typeof foo.length);

    答:number;foo.length的值还是0。delete无法删除,参考

    13.问:以下代码中,

    复制代码
    var name="the window";
    var object={
      name:"my object",
      getName: function(){
        return this.name;
      } }
    复制代码

    通过以下调用

    object.getName(); 
    (object.getName)();
    (object.getName = object.getName)()

    结果是?

    答:

    第一行的代码,this指向的就是object,所以毫无疑问;第二行代码虽然加上括号,就好像只是在引用一个函数,但this的值得到了维持。因为object.getName和(object.getName)的定义相同。第三行代码,先执行一条赋值语句,然后再调用赋值后的结果。因为这个赋值表达式的值是函数本身,所以this的值不能得到维持,结果就返回the window.

  • 相关阅读:
    11.4 final类
    11.3 final方法
    【GIS】GIS坐标系
    【其他】短信轰炸
    【js】js传递对象
    【注解】Autowired
    【js】vue.js v-model
    【问题】ajax两种传递id值方式的区别
    【随笔】6.高筑墙 广积粮 缓称王
    【随笔】5.多恩亲王 Red Viper 奥伯伦之死。
  • 原文地址:https://www.cnblogs.com/cangqinglang/p/8953999.html
Copyright © 2020-2023  润新知