es6函数模块-------初步学习

Posted 仔行天下

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了es6函数模块-------初步学习相关的知识,希望对你有一定的参考价值。

初步学习:

1 函数参数允许尾逗号
function clownsEverywhere(
  param1,
  param2,     //param2后面有逗号
) {  }




2 函数参数可以赋初值
  利用解构赋值默认值结合使用
函数的 length 属性 失真 ,是指没有赋初值的函数参数个数



3 name 属性
  函数的name属性返回该函数名



4 箭头函数,我理解=> 后面就是返回值,如果有多个参数,就用()括起来;
  如:var add=(val1,val2)=>val1+val2;
(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
this对象的指向是可变的,但是在箭头函数中,它是固定的。

function foo() {
  setTimeout(() => {
    console.log(id:, this.id);
  }, 100);
}

var id = 21;

foo.call({ id: 42 });
// id: 42
上面代码中,setTimeout的参数是一个箭头函数,这个箭头函数的定义生效是在foo函数生成时,而它的真正执行要等到 100 毫秒后。
如果是普通函数,执行时this应该指向全局对象window,这时应该输出21。但是,箭头函数导致this总是指向函数定义生效时所在的对象
(本例是{id: 42}),所以输出的是42。






5 rest参数,形如:...params
  例子:function doadd(...params){
        console.info(params.length);
        console.info(params[0]);
        console.info(params[1])
    }
    doadd(99,33.34,1,2,3,4,5,)

    7
    99

    33.34

注意,rest 参数之后不能再有其他参数(即只能是最后一个参数),否则会报错
函数的length属性,不包括 rest 参数。

arguments对象不是数组,而是一个类似数组的对象。所以为了使用数组的方法,必须使用Array.prototype.slice.call先将其转为数组。
rest 参数就不存在这个问题,它就是一个真正的数组,数组特有的方法都可以使用。

下面是一个 rest 参数代替arguments变量的例子。

// arguments变量的写法
function sortNumbers() {
  return Array.prototype.slice.call(arguments).sort();
}

// rest参数的写法
const sortNumbers = (...numbers) => numbers.sort();






6 双冒号运算符
  函数绑定运算符是并排的两个冒号(::),双冒号左边是一个对象,右边是一个函数。该运算符会自动将左边的对象,作为上下文环境(即this对象),绑定到右边的函数上面。

foo::bar;
// 等同于
bar.bind(foo);

foo::bar(...arguments);
// 等同于
bar.apply(foo, arguments);

const hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn(obj, key) {
  return obj::hasOwnProperty(key);
}




7 严格模式
  只要参数使用了默认值、解构赋值、或者扩展运算符,函数内就不能显式指定严格模式。因为:矛盾点 参数先执行,执行到函数体发现要严格,参数处才报错。
两种解决办法:
1 设定全局性的严格模式,这是合法的。
2 把函数包在一个无参数的立即执行函数里面

 

结束

以上是关于es6函数模块-------初步学习的主要内容,如果未能解决你的问题,请参考以下文章

初步学习javascript的generator函数

ES6学习笔记——模块化

ES6 模块串联

Python模块化编程-高阶函数#学习猿地

ES6重要吗?为什么要学习ES6?

ES6重要吗?为什么要学习ES6?