js练习题

700 阅读1分钟

下面是我平时收集的一些比较有意思的题目,记录并分享一下!!!

一、原型
第一题
    var A = function(){
    }
    
    A.prototype.n = 1
    var b = new A()
    A.prototype = {
        n:1,
        m:3
    }
    var c = new A()
    
    console.log(b.n, b.m, c.n, c.n) // 1 undefined 2 3
第二题
    var F = function(){
    }
    Object.prototype.a = function(){
        console.log("a()")
    }
    Function.prototype.b = function(){
        console.log("b()")
    }
    var f = new F()
    f.a() // a()
    f.b() // 报错
    F.a() // a()
    F.b() // b()
二、执行上下文栈
第三题
    console.log('gb' + i)
    var i = 1
    foo(1)
    function foo(i){
        if(i == 4){
            return
        }
        console.log('fb' + i)
        foo(i + 1);
        console.log('fe' + i)
    }
    console.log('ge' + i)
    // gbundefined fb1 fb2 fb3 fe3 fe2 fe1 ge1
三、变量提升
第四题
    function a(){}
    var a
    console.log( typeof a ) // function
第五题
    if(!(b in window)){
        var b = 1
    }
    console.log(b) // undefined
第六题
    var c = 1
    function c(c){
        console.log(c)
    }
    c(2) // 报错
三、作用域
第七题
    var a = 1
    function fn(){
        console.log(a)
    }
    function print(){
        var a = 2
        fn()
    }
    print(fn)
    // 1
三、闭包
第八题
    var name = "window"
    var obj = {
        name: 'object',
        getNameFunc: function(){
            return function(){
                return this.name
            }
        }
    }
    
    console.log(obj.getNameFunc()()) // window
###### 第九题 
    
```js
    var name = "window"
    var obj = {
        name: 'object',
        getNameFunc: function(){
            var that = this
            return function(){
                return that.name
            }
        }
    }
    
    console.log(obj.getNameFunc()()) // object
第十题
//(有难度)
    function fun(n, o){
        console.log(o)
        return {
            fun: function(m){
                return fun(m,n)
            }
        }
    }
    
    var a = fun(0); // undefined
    a.fun(1); // 0
    a.fun(2); // 0
    a.fun(3); // 0
    
    fun(0).fun(1).fun(2).fun(3); // undefined 0 1 2
    
    var C = fun(0).fun(1); // undefined 0
    c.fun(2); // 报错
    c.fun(3); // 报错
    

如果有什么不对的地方,或者不好的地方,还请指正