zoukankan      html  css  js  c++  java
  • javaScript----------(函数)

    函数

    当代码出现有规律的重复,此时要上心了。

    当代码出现大面积重复的时候就要进行封装了。

    因为一旦需要修改,那么就要大面积的修改!

    一:抽象

    这是一种思维!

    有了抽象,我们就可以站在高层次,思考问题,而不是关注繁多的细节。

    而函数就是代码抽象的一种方式。

    实例:

    计算1+2+3+...+10

    1.没有函数

    a=1+2+3+4+5+6+7+8+9+10

    再有需求计算1-100的和,就要写一遍1+...+100全是垃圾代码

    如果改,1-100中不要偶数,开始删代码。

    这样你的编程就成了负担!

    2.有了函数

    这里用python来实现

    def sum(args):
        ret = 0
        for i in args:
            ret+=i
        return ret

    print(sum(range(101)))

    好处:

    1.你没有写繁多的1-100的数字

    2.逻辑被重复调用。函数名看到就知道是干什么的,专注于其他的逻辑。

    二:语法

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

    关键字换为function,代码块用{}替换:而已,再加了;

    模仿的是java

    匿名函数

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

    二者完全等价,只不过匿名函数最后多一个;表示一个赋值语句。

    js中的参数比较特殊,即使没有定义形参,你传了参数也没有关系

    有默认的arguments参数,接收所有传入的参数,类似数组,但不是数组,按照数组来用即可。

    写了形参,那么函数体中肯定会用到,没有用到的全部放到了arguments中。

    es6中引入了...可变参数,也是java里面的,不再需要arguments

    可变参数放入了数组中,必须放最后

    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 []

    三:大坑

    js引擎会自动在行尾添加分号;

    function foo() {
        return
            { name: 'foo' };
    }
    
    foo(); // undefined

    return后自动添加了分号!

    function foo() {
        return { // 这里不会自动加分号,因为{表示语句尚未结束
            name: 'foo'
        };
    }

    四:var的大坑

    es6用let取代了var

    var是没用作用域的,var在函数中有作用域,是因为靠的函数的作用域。

    在for,if的{}是没有作用域的,全局都可以调用,都可以改动var声明的变量。

    变量提升

    编译阶段,所有的变量都会赋值为undefined,运行阶段,只有真正对此变量赋值,变量的值才会变,

    例如函数里面一个变量a=100,定义都没定义,就console.log(a)

    输出为undefined,赋值完再console.log(a)

    没有定义a就输出了啊,说明变量提前。

    赋值之后a=100

    再输出为100

    没有返回值,那么就是undefined

    解决var坑,没有作用域,以前是把它放到函数中,别在if和for里面声明定义变量。

    es6直接用let,let声明的变量就随意了,在for和if的{}是有作用域的。

    五:作用域

    es6中有了let,除了变量提前,再和python无异。

    es6引入解构赋值

    以前

    var array = ['hello', 'JavaScript', 'ES6'];
    var x = array[0];
    var y = array[1];
    var z = array[2];

    现在

    var [x, y, z] = ['hello', 'JavaScript', 'ES6'];

    注意,对数组元素进行解构赋值时,多个变量要用[...]括起来。

    如果数组本身还有嵌套,也可以通过下面的形式进行解构赋值,注意嵌套层次和位置要保持一致

    let [x, [y, z]] = ['hello', ['JavaScript', 'ES6']];

    解构赋值还可以忽略某些元素:

    let [, , z] = ['hello', 'JavaScript', 'ES6'];

    如果需要从一个对象中取出若干属性,也可以使用解构赋值,便于快速获取对象的指定属性:

    var person = {
        name: '小明',
        age: 20,
        gender: 'male',
        passport: 'G-12345678',
        school: 'No.4 middle school'
    };
    var {name, age, passport} = person;
    看十遍不如自己写一遍!巩固基础,纵横开拓!
  • 相关阅读:
    Win10 UWP Tile Generator
    Win10 BackgroundTask
    UWP Tiles
    UWP Ad
    Win10 build package error collections
    Win10 八步打通 Nuget 发布打包
    Win10 UI入门 pivot multiable DataTemplate
    Win10 UI入门 导航滑动条 求UWP工作
    UWP Control Toolkit Collections 求UWP工作
    Win10 UI入门 SliderRectangle
  • 原文地址:https://www.cnblogs.com/gyxpy/p/13231344.html
Copyright © 2011-2022 走看看