zoukankan      html  css  js  c++  java
  • JavaScript函数注意点

    1、return

    请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。

    如果没有return语句,函数执行完毕后也会返回结果,只是结果为undefined

    2、arguments

    JavaScript还有一个免费赠送的关键字arguments,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments类似Array但它不是一个Array

    实际上arguments最常用于判断传入参数的个数

    为了获取额外传入的参数,ES6标准引入了rest参数

    function foo(a, b, ...rest) {
        console.log('a = ' + a);
        console.log('b = ' + b);
        console.log(rest);
    }
    
    foo(1, 2, 3, 4, 5);
    rest参数只能写在最后,前面用...标识,从运行结果可知,传入的参数先绑定ab,多余的参数以数组形式交给变量rest,所以,不再需要arguments我们就获取了全部参数。

    3、小心你的return语句

    前面我们讲到了JavaScript引擎有一个在行末自动添加分号的机制,这可能让你栽到return语句的一个大坑:

    多行返回

    function foo() {
        return
            { name: 'foo' };
    }
    应该这么写
    function foo() {
        return { // 这里不会自动加分号,因为{表示语句尚未结束
            name: 'foo'
        };
    }
    4、作用域
    JavaScript的函数在查找变量时从自身函数定义开始,从“内”向“外”查找。如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量。
    变量提升:JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部:
    5、命名空间

    全局变量会绑定到window上,不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同名字的顶层函数,都会造成命名冲突,并且很难被发现。

    减少冲突的一个方法是把自己的所有变量和函数全部绑定到一个全局变量中

    // 唯一的全局变量MYAPP:
    var MYAPP = {};
    
    // 其他变量:
    MYAPP.name = 'myapp';
    MYAPP.version = 1.0;
    
    // 其他函数:
    MYAPP.foo = function () {
        return 'foo';
    };
    6、局部作用域
    由于JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块中是无法定义具有局部作用域的变量的:
    为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量:
    由于varlet申明的是变量,如果要申明一个常量,在ES6之前是不行的,我们通常用全部大写的变量来表示“这是一个常量,不要修改它的值”:
    ES6标准引入了新的关键字const来定义常量,constlet都具有块级作用域:
    7、对象中的方法
    this是一个特殊变量,它始终指向当前对象
    保存this,call,apply
     
  • 相关阅读:
    pyqt信号和槽传递额外参数
    PyQt--QTreeWidget
    转载:futex同步机制详解
    Linux 下的同步机制
    Linux 下线程的理解
    Linux下的物理内存管理2-slab缓存的管理
    转:C语言的编译链接过程的介绍
    LInux中ThreadInfo中的preempt_count字段
    LInux中的物理内存管理
    Linux下的内核抢占
  • 原文地址:https://www.cnblogs.com/gopark/p/10156078.html
Copyright © 2011-2022 走看看