函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
1.JavaScript 函数语法
函数就是包裹在花括号中的代码块,前面使用了关键词 function:
function functionname(){// 执行代码}
当调用该函数时,会执行函数内的代码。
可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript 在任何位置进行调用。
2.调用带参数的函数
在调用函数时,您可以向其传递值,这些值被称为参数。
这些参数可以在函数中使用。
您可以发送任意多的参数,由逗号 (,) 分隔:
function myFunction(var1,var2){代码}
变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。
<p>请点击其中的一个按钮,来调用带参数的函数。</p><button onclick="myFunction('Harry Potter','Wizard')">点击这里</button><button onclick="myFunction('Bob','Builder')">点击这里</button><script>function myFunction(name,job){alert("Welcome " + name + ", the " + job);}</script>
3.带有返回值的函数
有时,我们会希望函数将值返回调用它的地方。
通过使用 return 语句就可以实现。
在使用 return 语句时,函数会停止执行,并返回指定的值。
function myFunction(){var x=5;return x;}
上面的函数会返回值 5。
注意: 整个 JavaScript 并不会停止执行,仅仅是函数。JavaScript 将继续执行代码,从调用函数的地方。
函数调用将被返回值取代:
var myVar=myFunction();
myVar 变量的值是 5,也就是函数 “myFunction()” 所返回的值。
即使不把它保存为变量,您也可以使用返回值:
document.getElementById("demo").innerHTML=myFunction();
“demo” 元素的 innerHTML 将成为 5,也就是函数 “myFunction()” 所返回的值。
可以使返回值基于传递到函数中的参数:
计算两个数字的乘积,并返回结果:
function myFunction(a,b){ return a*b;}document.getElementById("demo").innerHTML=myFunction(4,3);
“demo” 元素的 innerHTML 将是:12
在您仅仅希望退出函数时 ,也可使用 return 语句。返回值是可选的:
function myFunction(a,b){if (a>b){return;}x=a+b}
如果 a 大于 b,则上面的代码将退出函数,并不会计算 a 和 b 的总和。
4.自调用函数
函数表达式可以 “自调用”。
自调用表达式会自动调用。
如果表达式后面紧跟 () ,则会自动调用。
不能自调用声明的函数。
通过添加括号,来说明它是一个函数表达式:
function show(){setTimeout(function(){console.log(1)show();},1000)}show()
5.函数参数
6.arguments 对象
JavaScript 函数有个内置的对象 arguments 对象。
argument 对象包含了函数调用的参数数组。
通过这种方式你可以很方便的找到最大的一个参数的值:
x = sumAll(1, 123, 500, 115, 44, 88);function sumAll() {var i, sum = 0;for (i = 0; i < arguments.length; i++) {sum += arguments[i];}return sum;}
7.使用构造函数调用函数
如果函数调用前使用了 new 关键字, 则是调用了构造函数。
这看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象:
// 构造函数:function myFunction(arg1, arg2) {this.firstName = arg1;this.lastName = arg2;}// This creates a new objectvar x = new myFunction("John","Doe");x.firstName; // 返回 "John"
8.作为函数方法调用函数
在 JavaScript 中, 函数是对象。JavaScript 函数有它的属性和方法。
call() 和 apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。
function myFunction(a, b) {return a * b;}myObject = myFunction.call(myObject, 10, 2); // 返回 20
9.重载
重载:就是根据参数的不同,动态决定调用哪个方法
js中没有重载的概念,因为重复声明,下面的会覆盖上面的声明
function go(a){console.log(a);}function go(a,b){console.log(a+b);}go(10);go(10,20)
9-1 使用arguments模拟重载:
function go(){if(arguments.length ==1){console.log(arguments[0])}else if(arguments.length == 2){console.log(arguments[0]+arguments[1])}}go(1)go(10,20)
10.解构
1.左边读取的字段,右手边必须有<br /> 2.读取的是右边的一个层级
var obj = {name: "lisi", age: 18, skill: "vue",s: {sex: "male"}};// var name = obj.name;// var age = obj.age;// var skill = obj.skill;var { name,s} = obj;console.log(name)console.log(s.sex)
11. 箭头函数
var go =()=>{console.log("hello world")}
11-1 带参数的箭头函数
var test = (x)=>{console.log(x);}
11-2 箭头函数的简写
var show = ()=>console.log("hello world");
11-3 带参数的简写
Tips:只有一个参数,可以省略小括号,只有一段表达式,可以省略大括号
var main = x=>console.log(x);
12.回调函数
就是将函数作为参数,传递给另一个函数
场景:一般在异步调用中使用
作用:
1.将函数内部的值返回到外部
2.取代了return语句
var show= function(res){console.log(res);}function go(callback){var a = 10;callback(a);}go(show);
示例
点击隐藏切换事件
<style>.parent{width:200px;height: 200px;border:1px solid #333;position: relative;}.parent>div{width:100%;height: 100%;position: absolute;}.html{background-color: red;z-index: 100;}.css{background-color: yellow;}.current{color:orange;}li{cursor: pointer;}</style></head><body><ul><li class="current">html</li><li>css</li></ul><div class="parent"><div class="html">html</div><div class="css">css</div></div><script>var lis = document.getElementsByTagName("li");//querySelectorAll()返回文档中匹配指定 CSS 选择器的所有元素var divs = document.querySelectorAll(".parent div");for(let i=0;i<lis.length;i++){lis[i].index = i;lis[i].onclick = function(){/* 1.遍历让所有的li移除class="current" */for(let i=0;i<lis.length;i++){lis[i].classList.remove("current");}/* 2.让当前元素添加class="current" */this.classList.add("current")console.log(this.index)/* 3.让所有的div隐藏 */for(let i=0;i<divs.length;i++){divs[i].style.display = "none"}/* 4.让对应的下标的div去显示 */divs[this.index].style.display = "block";}}</script>
