JS膏集04

JS膏集04

1、apply和call方法
可以改变this的指向,可以用于函数的调用
apply和call方法中如果没有传入参数,或者传入null,那么调用该方法的函数中的this就是window
函数名(thisArgs,数组);
函数名(thisArgs,args);

function f1(x,y){
console(x+y)
}
f1(10,20);//等价于
f1.apply(null,[10,20]);
f1.call(null,10,20);

apply和call都可以让函数或者方法来调用,传入参数和 函数自己调用的写法不一样,但效果是一样的。
window.f1.apply(obj.[10,20]);
apply和call将改变this的指向(obj)

在方法中改变this的指向
在这里插入图片描述
在这里插入图片描述
Function.prototype即为f(){native code。call和apply在其中存在

2、bind方法
函数名.bind();//将复制一份调用的函数,复制的同时可以传参
.bind(对象,参数1,参数2…)
在复制后再自行传参即可。复制后再自行调用
与apply和call同理,也会改变this指向。
在这里插入图片描述
bind的使用:通过对象调用方法,产生随机数
在这里插入图片描述
调用方法可以不停地产生随机数
在这里插入图片描述

3、函数中的成员介绍
.name:函数的名称,不可修改
.arguments:.length实参的个数
.length:形参的个数
.caller:返回函数的调用者

4、函数作为参数
在这里插入图片描述
函数作为参数后若在函数名后带有括号,则意味着是函数的返回值来作为函数的参数

5、
在这里插入图片描述
6、函数作为返回值使用
在这里插入图片描述
console.log(Object.prototype.toString)
将输出Object的数据类型[object Object]
数组的数据类型,借助call [object Array]
Object.prototype.toString.call(数组名)
在这里插入图片描述
在这里插入图片描述

7、函数作为参数使用
在这里插入图片描述
在这里插入图片描述
案例:为3个电影排序
在这里插入图片描述
在这里插入图片描述
8、作用域,作用域链及预解析
在这里插入图片描述
在这里插入图片描述
函数预解析将把它的内容一并解析完成

9、闭包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果均为11
在这里插入图片描述
依次为11,12,13

闭包案例产生相同的随机数
在这里插入图片描述
在这里插入图片描述

//闭包案例实现点赞
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>对自己狠点</title>
  <style>
    ul {
      list-style-type: none;
    }

    li {
      float: left;
      margin-left: 10px;
    }

    img {
      width: 200px;
      height: 180px;
    }

    input {
      margin-left: 30%;
    }
  </style>
  <script>
    //$永远都是24k纯帅的十八岁的杨哥$
  </script>
</head>
<body>
<ul>
  <li><img src="images/ly.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
  <li><img src="images/lyml.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
  <li><img src="images/fj.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
  <li><img src="images/bd.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
</ul>
<script>

  //获取所有的按钮
  //根据标签名字获取元素
  function my$(tagName) {
    return document.getElementsByTagName(tagName);
  }
  //闭包缓存数据
  function getValue() {
    var value=2;
    return function () {
      //每一次点击的时候,都应该改变当前点击按钮的value值
      this.value="赞("+(value++)+")";
    }
  }
  //获取所有的按钮
  var btnObjs=my$("input");
  //循环遍历每个按钮,注册点击事件
  for(var i=0;i<btnObjs.length;i++){
    //注册事件
    btnObjs[i].onclick=getValue();
  }




//  var btnObjs=my$("input");
//  var value=1;
//  //循环遍历每个按钮
//  for(var i=0;i<btnObjs.length;i++){
//
//    //为每个按钮注册点击事件
//    btnObjs[i].onclick=function () {
//      console.log("哈哈");
//      this.value="赞("+(value++)+")";
//    };
//  }


</script>
</body>
</html>

5、沙箱
在这里插入图片描述
在这里插入图片描述
自调用函数形成的沙箱
在这里插入图片描述
沙箱内定义变量与外界同名全局变量不冲突
案例:沙箱内如果没有相关属性或方法,可以访问到沙箱外的相关内容
利用沙箱可避免重名
6、递归
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Tanqurey/article/details/82950414
今日推荐