zoukankan      html  css  js  c++  java
  • 面试题:作用域

    1.

    var foo = 1;
    function ff () {
        alert(foo);
        var foo = 2;
        alert(foo);
        this.foo = 3;
    }
    var m1 = ff();
    var m2 = new ff();

    答案:undefind、2、undefind、2

    不解释

    2.

    var foo = 1;
    function ff () {
        alert(foo);
        var foo = 2;
        alert(this.foo);
        this.foo = 3;
    }
    var m1 = ff();
    var m2 = new ff();

    答案:

    • undefind:变量预解析
    • 1:ff()没有具体事件处理对象,函数内this就指向Window,公有变量又都是Window的属性,那this.foo = 1了
    • undefind:变量预解析
    • undefind:new ff(),是一个新的对象,this不指向window,指向函数本身了,这样this.foo前面没有声明,那么就需要预解析

    3.

    var foo = 1;
    function ff () {
        alert(foo);
        var foo = 2;
        alert(this.foo);
        this.foo = 3;
    }
    var m1 = ff();
    var m2 = ff();

    答案:undefind、1、undefind、3

      最后的答案3:m1的时候,this.foo = 3, 因为this指向的是window,所以已经把var foo = 1,变成3了

    -----------------------------------------------------

    1.

    var a = {'name': 'test'};
    function ff(obj){
        obj.name = 'abs'; 
    }
    ff(a);
    alert(a.name);

    答案:abs

    json是引用类型,所以a作为obj参数传进去,改变它的name属性,外面a的那么也改变

    2.

    var a = {'name': 'test'};
    function ff(obj){
        obj = new Object();
        obj.name = 'abs'; 
    }
    ff(a);
    alert(a.name);

    答案:test

    new Object()后,obj变成一个全新的对象了,obj.name 和外面的a.name 用的也不是一段内存了!

    ----------------------------------------------

     下面代码输出结果:

    var a = 'holle';
    function ff(){
        alert(a+b);
        var b = 'world';
    }
    ff(); alert(a
    +b);

    答案:holleundefind、没有输出(日志会报错)

    函数里,alert 后有b的声明,所有与解析的为undefind,直接alert,因为window下没有声明b 所以报错

    解释的不对请多多指教!

  • 相关阅读:
    不知道是不是爬虫
    springCloud 搭建Eureka
    HttpsUtils
    java验证
    复选框值存数据库 存取问题
    Oracle VM VirtualBox 无法链接本地
    ssh 无法查询数据库
    CSS 分割线
    vue+Element 表格编辑
    数组,对象的深拷贝 与 浅拷贝
  • 原文地址:https://www.cnblogs.com/niubenbit/p/4323578.html
Copyright © 2011-2022 走看看