首页 技术 正文
技术 2022年11月17日
0 收藏 400 点赞 3,553 浏览 2007 个字
  1 # Javascript 函数声明、调用、闭包
2 # 一、函数声明
3 # 1.直接声明。浏览器在执行前,会先将变量和函数声明进行提升。
4 fn();
5 function fn () {
6 console.log('test');
7 }
8 fn(1); # var fn1; 被提升。这里调用会报错未定义
9 var fn1 = function () {
10 console.log('test');
11 }
12 # 2.根据条件申明函数。现在最新版本的浏览器不会进行提升。但老的浏览器会提升。
13 if (true) {
14 function fn () {
15 console.log('true');
16 }
17 } else {
18 function fn () {
19 console.log('false');
20 }
21 }
22 # 3.new Function()来创建函数。说明函数也是对象。我们可以通过dir查看函数的属性和方法。
23 var fn = new Function('a', 'b', 'var name="zhangsan";console.log(name);console.log(a+b);'); # 创建函数
24 fn(1,2); # 调用,对应a,b参数
25 console.log(dir(fn)); # 查看函数中有哪些属性
26 # .通过dir查看到的属性有:
27 fn.arguments # 伪数组 获取到的是函数的实参
28 fn.caller # 函数的调用者,在全局调用的时候caller是null
29 fn.name # 函数名,字符串类型
30 fn.length # 函数实参的个数
31
32 # 二、函数的调用。函数中的this是由调用的时候来确定。
33 # 1.普通调用
34 function fn(){
35 console.log(this); # window
36 }
37 # 2.方法调用
38 var obj = {
39 fn: function () {
40 console.log(this); # 这里是obj
41 }
42 }
43 # 3.作为构造函数,也就是通过new来构造对象
44 function fn(){
45 console.log(this); # fn
46 }
47 new fn();
48 # 4.作为事件的处理函数 触发事件的对象
49 btn.onclick = function () {
50 console.log(this); # btn
51 }
52 # 5.作为定时器的参数
53 setInterval(function () {
54 console.log(this); # window
55 }, 100);
56
57 # 6.通过bind、call、apply调用
58 function fn(x,y){
59 console.log(this);
60 console.log(x+y);
61 }
62 obj = {
63 name: "zs"
64 }
65 fn1 = fn.bind(obj, 1, 2);
66 fn1(); # 需手动调用。this为obj
67 fn.call(obj, 1, 2); # 直接调用,this为obj
68 # .伪数组
69 arr = {
70 0: 100,
71 1: 21,
72 2: 43,
73 3: 55,
74 length: 4
75 }
76 arr['4'] = 7;
77 arr.length++;
78 Array.push.call(arr,30); # 伪数组中添加数据。arr对象的length会自动加1
79 # ..apply(this,[arr]) 将数组中的每项展开做参数传递给函数
80 var arr = [1,2,3,2,1,5,1,7,22,1];# 因为Math.max不能直接处理数组,所以我们需要用apply去处理
81 Math.max.apply(Math,arr); # 这样就求得了arr数组中的最大值了
82
83 # 三、高阶函数:以函数作为参数或者返回值的函数就叫高阶函数。
84 # .排序示例:
85 Array.prototype.mySort = function (fn) {
86 for (var i = 0; i < this.length-1; i++){
87 var isSort = true;
88 for (var j = 0; j< this.length - i - 1; j++){
89 if (fn(this[j], this[j1]) > 0){ # 这里通过函数来决定大小顺序排序
90 ifSort = false;
91 var tmp = this[j];
92 this[j] = this[j+1];
93 this[j+1] = tmp ;
94 }
95 }
96 }
97 }
98 var arr = [12,32,21,2,3];
99 arr.mySort(function (a,b){ return a-b;}); # 调用
100 # ..高阶函数之闭包:Closures(闭包)是使用被作用域封闭的变量,函数,闭包等执行的一个函数的作用域。通常我们用和其相应的函数来指代这些作用域。(可以访问独立数据的函数)
101 function getFun(n) {
102 return function (m) {
103 return n+m;
104 }
105 }
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,104
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,580
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,428
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,835
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,918