零散

1、浅拷贝

<script>
  /*
  深浅拷贝:
  数据类型
    1、基本数据类型(string | boolean | undefined | number | null | symbol
    2、引用数据类型 (Array | Function | Date | Object | RegExp | Error | Math)

    内存
    栈内存(基本数据类型,存取速度快,存放量小;引用类型地址)
  堆内存(引用数据类型)

  深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存(注意动态分配内存)。
  当对象和他所引用的对象一起拷贝时,即发生了深拷贝。
  深拷贝比浅拷贝速度且花销大
  */


  /* 实现浅拷贝 */
  function isObject(source) {
    return typeof source === 'object' && source != null;
  }

  function cloneDeep(source) {
    if (!isObject(source)) {
      return source; // 非对象返回自身
    }

    var target = Array.isArray(source) ? [] : {};

    for (var key in source) {
      if(Object.hasOwnProperty.call(source, key)) {
        target[key] = cloneDeep(source[key])
      } else {
        target[key] = source[key];
      }
    }

    return target;
  }

  var obj = {
    title: 'hello world',
    info: { name: 'king', price: 32 }
  };

  var obj2 = cloneDeep(obj);

  obj2.info.name = "Leonie";
  obj2.info.price = '24';

  console.log(JSON.stringify(obj));
  console.log(JSON.stringify(obj2));

</script>
深拷贝

 

2、

<script>
  'use strict';
  var x = 5;
  let o = {
    x: 10,
    doIt: function doIt() {
      var x = 20;
      setTimeout(function () {
        console.log(this.x); // 严、非严格模式下也是 5
        return this.x;
      }, 10);
    }
  };
  console.log(o.doIt());

  /*
  函数如果没有 return 语句,则默认 return undefined; 所以 doIt() 为 undefined。
  setTimeout 是宏任务,异步执行,这里的 this 指向 window【语法糖表现形式 x = window.x = this.x】,所以 x 为 5。
  * */
</script>
example01

 

3、视频播放速度设置:document.querySelector('video').playbackRate = 1.7

posted @ 2022-06-22 18:12  し7709  阅读(31)  评论(0编辑  收藏  举报