• Javascript备忘复习笔记2


    一.函数与形参

    1.函数

    function abs(x) {
        if (x >= 0) {
            return x;
        } else {
            return -x;
        }
    }
    alert(abs(-10));

    2.匿名函数

    var abs = function (x) {
        if (x >= 0) {
            return x;
        } else {
            return -x;
        }
    }
    alert(abs(-10));

    3.argument传入参数

    • 普通函数写法
    function abs() {
        if (arguments.length === 0) {
            return 0;
        }
        var x = arguments[0];
        return x >= 0 ? x : -x;
    }
    
    abs(); // 0
    abs(10); // 10
    abs(-9); // 9
    • 匿名函数写法
    var abs = function () {
        if (arguments.length === 0) {
            return 0;
        }
        var x = arguments[0];
        return x >= 0 ? x : -x;
    }
    
    alert(abs(-10)); // 10

    4.任意参数(类似python的def foo(a,*b,**c): pass)

    function foo(a, b, ...rest) {
        console.log('a = ' + a);
        console.log('b = ' + b);
        console.log(rest);
    }
    
    foo(1, 2, 3, 4, 5);
    // 结果:
    // a = 1
    // b = 2
    // Array [ 3, 4, 5 ]
    
    foo(1);
    // 结果:
    // a = 1
    // b = undefined
    // Array []

    二.变量作用域

    1.所有的变量都会绑定到window中;

    2.JavaScript的函数会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部;

    3.let/const可替代var申明一个块级作用域的变量(局部变量)

    三.方法

    1.在一个方法内部,this是一个特殊变量,它始终指向当前对象(只作用一层,如果函数内部再定义一层函数,那么里面这个函数的this会指向undefined,补救方法就是引入 var that = this;)

    function getAge() {
        var y = new Date().getFullYear();
        return y - this.birth;
    }
    
    var xiaoming = {
        name: '小明',
        birth: 1990,
        age: getAge  //此处为函数,不为函数的调用
    };
    
    xiaoming.age(); // 25, 正常结果
    
    //错误写法
    var fn = xiaoming.age; // 反例,先拿到xiaoming的age函数
    fn(); // NaN
    • 有点疑惑的是:
    //正确写法
    var xiaoming = {
        name: '小明',
        birth: 1990,
        age: function () {
            var that = this;
            function getAgeFromBirth() {
                var y = new Date().getFullYear();
                return y - that.birth;
            }
            return getAgeFromBirth();
        }
    };
    
    alert(xiaoming.age());
    
    
    
    //错误写法
    
    var that;
    function getAgeFromBirth() {
                var y = new Date().getFullYear();
                return y - that.birth;
            }
    
    var xiaoming = {
        name: '小明',
        birth: 1990,
        age: function () {
            var that = this;
            return getAgeFromBirth();
        }
    };
    
    alert(xiaoming.age());

    2.js的闭包跟python的不同,python是返回函数,js是返回函数的调用!

    3.一般的语言中,都是对象调用方法,但js有个比较有趣的点就是可以反过来用apply实现方法指定对象的目的(这个特性可以修复1中的this->undefined的缺陷)

    function getAge() {
        var y = new Date().getFullYear();
        return y - this.birth;
    }
    
    var xiaoming = {
        name: '小明',
        birth: 1990,
        age: function (){
            return getAge();
        }
    };
    
    alert(getAge.apply(xiaoming,[])); //25,正确
    alert(xiaoming.age());   //NaN错误

    4.apply实现装饰器

    5.高阶函数

    function abs(z){
        if(z<0) return -z;
        else return z;
    }
    function add(x,y,f){
        return f(x) + f(y);
    }
    alert(add(-3,5,abs));

    6. Map/reduce/filter

    var arr = [1, 3, 5, 7, 9];
    var fun = function (x, y) {
        return x + y;
    }
    var filt = function (s){
        return s % 3 === 0;
    }
    alert(arr.reduce(fun)); //reduce 25
    alert(arr.map(fun)); //map
    alert(arr.filter(filt)); //filter 3,9

    7.扩展sort排序(高阶函数)

    var arr = [10, 20, 1, 2];
    var after_sort = arr.sort(function (x,y){
        if (x>y){
            return 1;
        }
        if (x<y){
            return -1;
        }
        return 0;
    })
    
    alert(typeof(after_sort)); //object
    alert(after_sort);  //[1,2,10,20]

    8.闭包

    9.箭头函数

    var fn = x => x * x;

    等价于

    var fn = function  (x) {
        return x*x;
    }

    10.迭代器

  • 相关阅读:
    通过scp拷贝文件时无需交互输入密码
    suse linux安装lrzsz
    shc加密shell脚本
    linux小程序--cmatrix
    linux系统PXE+Kickstart自动安装系统
    升级SSH
    shell生成随机数的几种方法
    django —— MVT模型
    Django学习---笔记一
    python学习--Django虚拟环境搭建
  • 原文地址:https://www.cnblogs.com/alexkn/p/4765159.html
Copyright © 2020-2023  润新知