JavaScript函数进阶

流楚丶格念 2021-07-20 03:52:43
javascript


函数进阶

函数的定义方式

函数声明

function foo () {
}

  • 1.
  • 2.
  • 3.

函数表达式

var foo = function () {
}

  • 1.
  • 2.
  • 3.

函数声明与函数表达式的区别

函数声明:

  • 函数声明必须有名字
  • 函数声明会函数提升,在预解析阶段就已创建,声明前后都可以调用

函数表达式:

  • 函数表达式类似于变量赋值
  • 函数表达式可以没有名字,例如匿名函数
  • 函数表达式没有变量提升,在执行阶段创建,必须在表达式执行之后才可以调用

这是一个根据条件定义函数的例子:

if (true) {
function f () {
console.log(1)
}
} else {
function f () {
console.log(2)
}
}

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

以上代码执行结果在不同浏览器中结果不一致。

不过我们可以使用函数表达式解决上面的问题:

var f
if (true) {
f = function () {
console.log(1)
}
} else {
f = function () {
console.log(2)
}
}

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

函数的调用方式

函数内 this 指向的不同场景

函数的调用方式决定了 this 指向的不同:

调用方式 非严格模式 备注
普通函数调用 window 严格模式下是 undefined
构造函数调用 实例对象 原型方法中 this 也是实例对象
对象方法调用 该方法所属对象 紧挨着的对象调用的this
事件绑定方法 绑定事件对象 当前的实例对象
定时器函数 window window

探究案例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
</head>
<body>
</body>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>title</title>
<script>
/*
*
* 函数中的this的指向
*
*
* 普通函数中的this是谁?-----window
* 对象.方法中的this是谁?----当前的实例对象
* 定时器方法中的this是谁?----window
* 构造函数中的this是谁?-----实例对象
* 原型对象方法中的this是谁?---实例对象
*
*
* */
//严格模式:
"use strict";//严格模式
function f1() {
console.log(this);//window
}
f1();
//普通函数
function f1() {
console.log(this);
}
f1();
//定时器中的this
var inter=setInterval(function () {
console.log(this);
clearInterval(inter);
}, 1000);
//构造函数
function Person() {
console.log(this);
// 对象的方法
this.sayHi = function () {
console.log(this);
};
}
//原型中的方法
Person.prototype.eat = function () {
console.log(this);
};
var per = new Person();
console.log(per);
per.sayHi();
per.eat();
//BOM:中顶级对象是window,浏览器中所有的东西都是window的
</script>
</head>
<body>
</body>
</html>

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.

函数也是对象

  • 所有函数都是 Function 的实例

  • 也就是说所有的函数实际上都是Function的构造函数创建出来的实例对象

案例:函数数组的使用

在这里插入图片描述
forEach忘了的可以看一下菜鸟的教程:
https://www.runoob.com/jsref/jsref-foreach.html
第一个参数就是遍历到的当前元素其本身

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>title</title>
<script>
//数组可以存储任何类型的数据
var arr=[
function () {
console.log("1");
},
function () {
console.log("2");
}
,
function () {
console.log("3");
}
,
function () {
console.log("4");
},
function () {
console.log("5");
}
];
//回调函数:函数作为参数使用
arr.forEach(function (ele) {
ele();
});
</script>
</head>
<body>
</body>
</html>

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
版权声明
本文为[流楚丶格念]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_15265965/2891972

  1. 【django轻量级框架】Django项目导入css,js,images等静态文件
  2. 2.4.5全局样式与局部样式和2.4.6 CSS变量-页面样式与布局【uni-app从入门到精通在线教程(黄菊华-跨平台开发系列教程)】
  3. 微信小程序界面设计小程序中的WXSS(css)选择器课程-::first-line 伪元素
  4. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:empty 伪类
  5. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:checked 伪类(不支持)
  6. 微信小程序界面设计小程序中的WXSS(css)选择器课程-子元素选择器
  7. 微信小程序界面设计小程序中的WXSS(css)选择器课程-相邻兄弟选择器
  8. 微信小程序界面设计小程序中的WXSS(css)选择器课程-后代选择器
  9. 微信小程序界面设计小程序中的WXSS(css)选择器课程-属性选择器
  10. 微信小程序界面设计小程序中CSS3样式精通课程-框大小box-sizing
  11. 微信小程序界面设计小程序中CSS3样式精通课程-多列-Columns列的宽度和列数
  12. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:last-of-type 伪类
  13. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:only-child 伪类
  14. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:only-of-type 伪类
  15. 微信小程序界面设计小程序中的WXSS(css)选择器课程-::after伪元素
  16. 微信小程序界面设计小程序中的WXSS(css)选择器课程-::before伪元素
  17. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:nth-last-of-type()伪类
  18. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:nth-of-type() 伪类
  19. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:last-child 伪类
  20. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:disabled | :enabled 伪类
  21. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:first-child 伪类
  22. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:first-of-type 伪类
  23. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:focus 伪类
  24. 微信小程序界面设计小程序中的WXSS(css)选择器课程-派生选择器
  25. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:nth-child() 伪类
  26. 微信小程序界面设计小程序中的WXSS(css)选择器课程-选择器的分组
  27. HTML基础-简介
  28. ASP实战之HTML入门-黄菊华-专题视频课程
  29. 微信小程序WxParse解析富文本(html)代码在线视频教程
  30. HTML语言基础.上
  31. HTML语言基础.下
  32. HTML!
  33. 【网页前端设计Front end】HTML语言基础.上(看不懂你来打我)
  34. 【网页前端设计Front end】HTML语言基础.下(看不懂你来打我)
  35. 【django轻量级框架】HTML上传文件拦截到本地
  36. HTML5基础知识实战演练教程-黄菊华-专题视频课程
  37. 基于WEB的HTML5购物网站、H5电商购物平台网上商城网站毕业设计(1)商城首页
  38. 基于WEB的HTML5购物网站、H5电商购物平台网上商城网站毕业设计(2)商城分类
  39. Introduction of modern JavaScript chart library apexcharts.js | software
  40. 微信小程序框架weui的基础使用
  41. 一文入魂!彻底巩固你的Nginx知识体系!
  42. Nginx是什么?有哪些核心技术?
  43. Nginx配置如何一键生成
  44. 就这一次把网路的几种IO模型以及Nginx基本原理彻底搞清楚
  45. 优质高效,阿里性能怪兽宝典(Redis+Nginx)限时开源,手慢无!
  46. Nginx的配置文件nginx.conf配置解释
  47. 安装的nginx 地址重写
  48. nginx防盗链
  49. nginx动静分离
  50. nginx优化
  51. Nginx虚拟主机
  52. Nginx 反向代理
  53. IDEA实现热部署前端界面(Tomcat、IDEA)
  54. JavaScript中call与apply的区别
  55. JavaScript代码无分号问题
  56. 在Chrome浏览器中禁用JavaScript
  57. JavaScript为内置对象添加原型方法
  58. JavaScript原型数据共享与方法共享探究
  59. JavaScript把局部变量变成全局变量
  60. JavaScript函数自调用