JS膏集04

时间:2023-01-25 14:52:14

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的指向

JS膏集04

JS膏集04

Function.prototype即为f(){native code。call和apply在其中存在

2、bind方法

函数名.bind();//将复制一份调用的函数,复制的同时可以传参

.bind(对象,参数1,参数2…)

在复制后再自行传参即可。复制后再自行调用

与apply和call同理,也会改变this指向。

JS膏集04

bind的使用:通过对象调用方法,产生随机数

JS膏集04

调用方法可以不停地产生随机数

JS膏集04

3、函数中的成员介绍

.name:函数的名称,不可修改

.arguments:.length实参的个数

.length:形参的个数

.caller:返回函数的调用者

4、函数作为参数

JS膏集04

函数作为参数后若在函数名后带有括号,则意味着是函数的返回值来作为函数的参数

5、

JS膏集04

6、函数作为返回值使用

JS膏集04

console.log(Object.prototype.toString)

将输出Object的数据类型[object Object]

数组的数据类型,借助call [object Array]

Object.prototype.toString.call(数组名)

JS膏集04

JS膏集04

7、函数作为参数使用

JS膏集04

JS膏集04

案例:为3个电影排序

JS膏集04

JS膏集04

8、作用域,作用域链及预解析

JS膏集04

JS膏集04

函数预解析将把它的内容一并解析完成

9、闭包

JS膏集04

JS膏集04

JS膏集04

JS膏集04

结果均为11

JS膏集04

依次为11,12,13

闭包案例产生相同的随机数

JS膏集04

JS膏集04

//闭包案例实现点赞
<!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="data:images/ly.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
<li><img src="data:images/lyml.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
<li><img src="data:images/fj.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
<li><img src="data: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、沙箱

JS膏集04

JS膏集04

自调用函数形成的沙箱

JS膏集04

沙箱内定义变量与外界同名全局变量不冲突

案例:沙箱内如果没有相关属性或方法,可以访问到沙箱外的相关内容

利用沙箱可避免重名

6、递归

JS膏集04

JS膏集04