改变函数this的指向。严格模式、高阶函数、闭包

1 call

obj.call(改变this指向的对象,参数1,参数3) 参数可选
1.1 call 第一可调用函数 第二可以改变函数的this指向
1.2 call 的主要作用他可以实现继承

         <script>

    var o = {
        name:'andy'
    }
    function fn(a,b){
        console.log(this);
        console.log(a+b);
    }
    fn.call(o,1,2)

</script> 继承
       function Father(user,age,sex){
        this.user=user;
        this.age=age;
        this.sex= sex;
    }
    function Son(uset,age,sex){
        Father.call(this,uset,age,sex);
    }
    var son =new Son('123',18,'nan')
apply

fun.apply(thisArg,[argsArray]);
thisArg:在fun函数运行时指定的this
artgsArray:船体的值,必须要包含在数据里
返回值就是函数的返回值,应为它要调用函数。

 <script>
    var o = {
        name:'ssss'
    }
    function fn (arr){
        console.log(this);
        console.log('------');
        console.log(arr);
        }
    //1.这里改变函数内部this  的指向,同时调用函数
    //2.参数必须是数组格式。
    fn.apply(o,['1']);
    // 3.apply的主要应用
    var arr=[1,33,4,45,56,22,22];
    var max = Math.max.apply(Math,arr);
    console.log(max);
</script>
bind

bind()方法不会调用函数,但是能改变函数内部this指向。
fun.bind(thisArg,arg1,arg2,...)

  • thisArg:在fun函数运行时指定的this

  • arg1,arg2 传递的其他参数

  • 返回由指定的this之后初始化参数改造的原函数拷贝。

    <script>
      var o ={
      name:'name'
    }
    function fn (a,b){
      console.log(this);
      console.log(a+b);
    }
    //这里返回的是改变 this后的新函数
    var f=fn.bind(o,1,2);
    // 调用函数
    f();
    </script>
    
call apply bind 总结
  1. call apply 会调用函数,并改变函数内部this指向
  2. call apply 传递的参数不一样,call 传递阐述arg1,arg2形式。apply必须是数组的形式。
    3.bind 不会调用函数,可以变函数内部的this指向。
    主要应用
    1.call 主要做继承、
    2.apply 经常和数组相关,比如借助数学对象实现数组最大值,最小值。
    3.bind 不调用 函数,但是还想改变this指向。比如改变定时器内部的this 指向
严格模式

ES5在IE10 以上的版本才会被支持。

  1. 消除了javascript 语法的一些不合理、不严谨之处,减少了一些怪异行为
    2.消除了一些不安全的地方
    3.提高变异效率
    4.为未来语法的javascript 做好了铺垫
    严格模式的开启
    1.为脚本开启严格模式
    直接写 'use strict'

    <script>
     'use strict'
     // 下面的js diamante会严格执行代码
    </script>
    

2 为函数开启严格模式
在指定的函数中写 ‘use strict’

<script>
    function fn(){
        'use strict'

    }
    function fun(){

    }
</script>

3 严格模式的变化

1 . 变量 变量必要要先声明后使用
2 . 不能删除已经申明好的变量。
3 . 以前全局作用下this 指向的是window ,在严格模式下执行的undefined。
4 . 以前构造函数不加new 可以直接调用,在严格模式下必须要new一下。
5.定时器this 还是指向window
6.事件、对象还是指向调用者。

严格模式下函数变化

1 . 不能定义相同的形参。
2 . 函数必须声明在顶层。

高阶函数

高阶函数是对其他函数进行操作的函数。它接收函数作为参数或将函数作为返回值输出。
下面就是将函数作为参数

 <script>
      function fn(callBack){\
        callBack&&callBack();
        }
 </script>
  fn(function(){
  alert{'hi'};
  }

闭包

闭包:指有权访问另一个函数作用域中变量的函数。
闭包的作用:延伸了变量的作用范围。
下面代码在fun函数中访问了fn函数中的变量num fn 函数就是闭包。

  <script>
    function fn(){
        var num =10;
        function fun(){
            console.log(num);
        }  
        fun();

    }
    fn();

</script>

浅拷贝和深拷贝

  1. 浅拷贝只拷贝一层,更深层次对象级别的只拷贝引用】

  2. 深拷贝是多层的,每一层都会拷贝
    3.在ES6中可以直接使用Object.assign浅拷贝(要拷贝成的对象,拷贝的对象)

    Object.assign(o,obj);
    

深拷贝

    <script>
    var obj = {
        id:1,
        age:2,
        msg:{
            name1:1,
            sex:2
        },
        color:[1,3,56]
    }
    var o ={}
    // for(var k in obj){
    //     o[k] = obj[k];
    // }

    function deepCopu(newObj,oldObj){
        for(var k in oldObj){
            var item = oldObj[k];
            if(item instanceof Array){
            // 这里要注意
                newObj[k]={};
                deepCopu(newObj[k],item);
            }else if(item instanceof Object){
                newObj[k]={};
                deepCopu(newObj[k],item);
            }else{
                newObj[k]=item;
            }
        }
    }
    deepCopu(o,obj);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容