闭包/this练习题

1、

var num = 1,
    obj = {
        num: 2,
        fn: (function (num) {
            this.num *= 2;
            num += 2;

            return function () {
                this.num *= 3;
                num ++;
                console.log(num);
            }
        })(num)
    };
var fn = obj.fn;
fn();
obj.fn();
console.log(num, obj.num);
练习题1

2、

var foo = 1;
function bar() {
    if(!foo){
        var foo = 100;  // 不管条件成不成立,都要进行变量提升
    }
    console.log(foo);
}
bar();  // 100
练习题2

3、

var foo = 'hello';
(function (foo) {
    // 先形参赋值
    console.log(foo); //hello
    var foo = foo || 'world';
    // foo = foo
    console.log(foo);
})(foo);
console.log(foo);  // hello hello hello

逻辑或:第一项转布尔类型为true,就返回第一项的运算结果,反之,返回后面的运算结果
逻辑与:跟逻辑或相反
若两者都有时,先算逻辑与再算逻辑或,即逻辑与的优先级高
0||2&&false||3 -> 3
应用:

function fn(num, callback){
  // 若num没传值让他为0
  num = num || 0;
  // 若callback传递一个函数就执行
  callback && callback();
}

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 5 6 2
练习题4

5、

var ary = [1,2,3,4];
function fn(ary) {
    ary[0] = 0;
    ary = [0];
    ary[0] = 100;
    return ary;
}
var res = fn(ary);
console.log(ary); // [0, 2, 3, 4]
console.log(res); // [100]

6、

function fn(i) {
    return function (n) {
        console.log(n + (i++));
    }
}
var f = fn(10);
f(20); // 30
fn(20)(40); // 60 
fn(30)(50); // 80
f(30); // 41
练习题6

7、

var num = 10;
var obj = {num: 20};
obj.fn = (function (num) {
    this.num = num*3;
    num ++;
    return function (n) {
        this.num += n;
        num ++;
        console.log(num);
    }
})(obj.num);
var fn = obj.fn;
fn(5);
obj.fn(10);
console.log(num, obj.num);  // 22 23 65 30
练习题7
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 6,378评论 0 10
  • 运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,本章逐一介绍这些运算...
    徵羽kid阅读 794评论 0 0
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,698评论 0 4
  • DAY 01 JAVA简述 Java是由SUN公司在1995年推出的一门高级编程语言,是现今服务器端的首选编程语言...
    周书达阅读 1,104评论 0 0
  • 表达式 表达式是由数字、运算符、数字分组符号(如括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合...
    劼哥stone阅读 656评论 0 4

友情链接更多精彩内容