JS原型和闭包(测试题)

1、声明定义一个函数Fn,那么Fn.prototype是一个什么?

  • object
  • function
  • Fn
  • null

2、Object.proto.__proto__指向什么?

  • Object
  • Function
  • Object.prototype
  • null

3、声明定义一个函数Fn.prototype.contructor指向什么?

  • Object
  • Fn
  • Object.prototype
  • null

4、程序执行p.getAge(),返回什么?

function Person() {
    this.age = 20;
}

Person.prototype.age = 30;
Person.prototype.getAge = function () {
    return this.age;  
};

var p = new Person();
  • 20
  • 30
  • null
  • undefined

5、执行obj.getName(),返回什么?

var name = 'cat';
var obj = {
    name: 'dog',
    getName: function () {
       this.name = 'mouse';
        return (function () {
            return this.name;
        })();
    }
};
  • cat
  • dog
  • mouse
  • undefined

6、连续三次调用add(),最后一次调用输出的结果是什么?

var add = (function () {
    return function () {
        var counter = 0;
        return (counter += 1);
    };

})();
  • 0
  • 1
  • 3
  • 执行会报异常

7、直接调用sayAnimal(),控制台会输出什么?

var animal = "dog";

function sayAnimal() {
    animal = "cat";
    
    function animal() {}
    console.log(animal.toString());
}
  • dog
  • cat
  • function animal() {}
  • 执行会报异常

8、ES5环境中运行,程序输出什么?

var func1 = function () {
    return true;
};

var func2 = function () {
    return false;
};

(function () {
    if (func2()) {
        func1 = function () {
            return false;
        };

        function func2() {
            return ture;
        };
    }
})();

console.log(func1());
  • true
  • false
  • undefined
  • 执行会报异常

9、在ES5环境中运行,程序会输出什么?

var func1 = function () {
    return ture;
};

var func2 = function () {
    return false;
};

(function () {
    if (func2()) {
        func1 = function () {
            return false;
        };

        var func2 = function () {
            return true;
        };
    }
})();
  • true
  • false
  • undefined
  • 执行会报异常

10、程序输出什么?

func1();
func2();

console.log(innerVar1);
console.log(innerVar2);


function func1() {
    innerVar1 = 1;
}


function func2() {
    innerVar2 = 2;
}
  • 会报“innerVar1 is not defined”
  • 会报“func1 is not defined”
  • 会先输出1,再报“innerVar2”
  • 会正常执行,输出:1,2

11、关于__proto__和prototype属性,正确的是什么?(多选)

  • 每个对象都有__proto__属性
  • 只有普通对象才有__proto__属性
  • 每个对象都有prototype属性
  • 只有函数对象才有prototype属性

12、关于instanceof运算符,哪些表达式返回true?(多选)

  • ( new Object() )insanceof Object
  • Function instanceof Function
  • Object instanceof Function
  • Function.prototype instanceof Object
  • Object.prototype instanceof Object

13、javascript运行的执行上下文,分哪几种?(多选)

  • 全局上下文:代码默认运行的环境,最先回进入到全局环境中
  • 函数上下文:在函数的局部环境中运行的代码上下文
  • 块级上下文:在代码块中运行的代码上下文
  • Eval上下文:在eval()函数中运行的代码上下文

14、关于js作用域,哪些是正确的?(多选)

  • JS采用的是静态作用域,也叫词法作用域
  • JS作用域分全局作用域、函数作用域和块级作用域
  • 全局作用域下的变量、对象、函数等可以被任何地方的代码访问
  • 在块语句内部定义的变量会保留在他们已经存在的作用域内
  • 使用自执行的匿名函数包裹块语句构建作用域,也叫私有作用域

15、哪些实现了闭包?(多选)

function func1(){
    for(var i=0;i<5;i++) {
        setTimeout(function () {
            console.log(i);
        },3*1000);
    }
    
}

func1();
function func2() {
    var counter = 0;
    setTimeout(function () {
        console.log(counter);
    },3*1000);
}

func2();
function func3 () {
    var counter = 0;
    function getCounter(counter) {
        return counter++;
    }
    return getCounter;
}

func3()(2);
function func4 () {
    var counter = 0;

    function addCounter() {
        return counter++;
    }
    addCounter();

}
func4();

16、执行代码,正确的是?(多选)

var counter = 100;

function fn() {
    var counter = 0;

    fn.count = function () {
        console.log(++counter);
    };

    window.print = function () {
        console.log(--counter);
    };

    function plus() {
        console.log(++counter);
    }

    return plus;

}

var foo = fn();
foo();
print();
fn.count();
foo.count();
  • 代码执行完18行后,控制台输出1
  • 代码执行完19行后,控制台输出-99
  • 代码执行完20行后,控制台输出1
  • 代码执行完21行后,控制台输出2

17、所有函数对象的__proto__都指向Function.prototype,它是一个空函数(Empty function)

18、除了Object.prototype,所有对象的__proto__都指向其构造器的prototype

19、所有函数对象的prototype,都是普通对象

20、JS中作用域分去哪聚作用域、函数作用域和块级作用域

21、以下代码执行print函数,控制台输出undefined

function print() {
    if(true) {
        var greeting = "Hello world";

    }
    console.log(greeting);
}

22、每当一个函数被调用时就会为该函数创建一个执行上下文,同时与之关联的会有一个变量对象,该上下文中的所有变量和函数全都保存在这个对象中

23、代码块执行到11行,foo()执行完后,foo()的执行上下文环境内的x变量就会被释放掉

function foo() {
    var max = 10;

    return function bar(x) {
        if (x > max) {
            console.log(x);
        }
    
    }
    
}


var fa = foo(),
    max = 100;

fa(15);

24、在闭包使用过程中,在闭包函数退出前,通过删除不使用的局部变量,可以有效防止可能造成的内存泄漏

你可能感兴趣的:(JS)