闭包作用域练习题

859 阅读1分钟

1、

var a = 10,
    b = 11,
    c = 12;
function test(a) {
    a = 1;
    var b = 2;
    c = 3;
}
test(10);
console.log(a, b, c);

2、

var a = 4;
function b(x, y, a) {
    console.log(a);
    arguments[2] = 10;
    console.log(a);
}
a = b(1, 2, 3);
console.log(a);

3、我们需要理解映射机制在什么阶段建立(只有在形参赋值阶段建立)

function fn(x, y) {
    /!*
     * EC(FN)
     *   作用域链:<EC(FN),EC(G)>
     *   初始ARGUMENTS: {0:10,length:1} 
     *   形参赋值:x=10 y=undefined
     *      「映射关系」  x->arguments[0]
     *   变量提升:--
     *!/
    let arg = arguments;
    x = 100;
    console.log(arg[0]); //=>100

    arg[1] = 200;
    console.log(y); //=>undefined
}
fn(10); 

4、

var a = 9;
function fn() {
    a = 0;
    return function (b) {
        return b + a++;
    }
}
var f = fn();
console.log(f(5));
console.log(fn()(5));
console.log(f(5));
console.log(a);

5、

var test = (function (i) {
    return function () {
        alert(i *= 2);
    }
})(2);
test(5);

6、

var x = 4;
function func() {
    return function(y) {
        console.log(y + (--x));
    }
}
var f = func(5);
f(6);
func(7)(8);
f(9);
console.log(x);

7、

 var x = 5,
    y = 6;
function func() {
    x += y;
    func = function (y) {
        console.log(y + (--x));
    };
    console.log(x, y);
}
func(4);
func(3);
console.log(x, y);

8、

function fun(n, o) {
    console.log(o);
    return {
        fun: function (m) {
            return fun(m, n);
        }
    };
}
var c = fun(0).fun(1);
c.fun(2);
c.fun(3);