• 不同于Python,JS中函数定义无先后顺序
  • 函数不能同名,否则报错: 已经被定义(Identifier ‘add’ has already been declared)

    定义函数

    1. function sayName(){
    2. let name = 1
    3. console.log(name);
    4. }
    5. sayName()

    默认值

    ```javascript // 1.带参数默认值的函数 // es5的写法 function add(a, b) { a = a || 10; b = b || 20; return a + b; } console.log(add()); # 30

function add2(a, b = 20) { return a + b; } console.log(add2(30)); # 50

  1. ```javascript
  2. // 2.默认的表达式也可以是一个函数
  3. function add(a, b = getVal(5)) {
  4. return a + b;
  5. }
  6. function getVal(val) {
  7. return val + 5;
  8. }
  9. console.log(add(10)); # 20

剩余参数

  1. // es5写法
  2. function pick(obj) {
  3. let result = Object.create(null);
  4. for(let i = 1;i < arguments.length;i++){
  5. result[arguments[i]] = obj[arguments[i]]
  6. }
  7. return result;
  8. }
  9. let book = {
  10. title:'es6的教程',
  11. author:'ecithy',
  12. year:2019
  13. }
  14. let bookData = pick(book,'title','year','author');
  15. console.log(bookData);
  1. // 3.剩余参数:由三个点...和一个紧跟着的具名参数指定 ...keys
  2. // ...keys是一个数组对象
  3. function pick(obj, ...keys) {
  4. // ...keys 解决了arguments 的问题
  5. let result = Object.create(null);
  6. for (let i = 0; i < keys.length; i++) {
  7. result[keys[i]] = obj[keys[i]];
  8. }
  9. return result;
  10. }
  11. let book = {
  12. title: 'es6的教程',
  13. author: 'ecithy',
  14. year: 2019
  15. }
  16. let bookData = pick(book, 'year', 'author');
  17. console.log(bookData);

args和arguments区别

  1. function checkArgs(...args) {
  2. console.log(args);
  3. console.log(arguments);
  4. }
  5. checkArgs('a', 'b', 'c');

image.png

扩展运算符

  • 剩余运算符:把多个独立的合并到一个数组中
  • 扩展运算法:将一个数组分割,并将各个项作为分离的参数传给函数 ```javascript // 处理数组中的最大值,使用apply const arr = [10, 20, 50, 30, 90, 100, 40]; console.log(Math.max.apply(null,arr));

// es6 扩展运算法更方便 console.log(Math.max(…arr));

  1. <a name="QvIVw"></a>
  2. ## 箭头函数
  3. 箭头函数属于es6的语法
  4. ```javascript
  5. // 使用=>来定义 function(){}等于与 ()=>{}
  6. let add = function (a, b) {
  7. return a + b;
  8. }
  9. let add = (val1, val2) => val1 + val2;
  10. console.log(add(10, 20));

函数this指向

  1. // es5中this指向:取决于调用该函数的上下文对象
  2. let PageHandle = {
  3. id: 123,
  4. init: function () {
  5. document.addEventListener('click',function(event) {
  6. // this.doSomeThings is not a function
  7. // console.log(this);
  8. this.doSomeThings(event.type);
  9. })
  10. },
  11. doSomeThings:function(type){
  12. console.log(`事件类型:${type},当前id:${this.id}`);
  13. }
  14. }
  15. PageHandle.init();
  1. let PageHandle = {
  2. id: 123,
  3. init: function () {
  4. // 箭头函数没有this指向,箭头函数内部this值只能通过查找作用域链来确定,一旦使用箭头函数,当前就不存在作用域链
  5. document.addEventListener('click', (event) => {
  6. // this.doSomeThings is not a function
  7. console.log(this);
  8. this.doSomeThings(event.type);
  9. }, false)
  10. },
  11. doSomeThings: function (type) {
  12. console.log(`事件类型:${type},当前id:${this.id}`);
  13. }
  14. }
  15. PageHandle.init();