一、函数的介绍
js函数语法 :function 函数名(){}
1、function 是预定义 函数名是自定义的 ,函数名的定义规则符合 变量的定义规则
2、数字(在后面) 字母 下划线 $ 符号 组成,定义一个函数名为fn的函数,这个函数可以理解成是一个箱子可以装代码,代码会被装在 大括号里面,装起来之后是代码是不会执行的。
二、函数的调用
1、例如function fn(){}; 可以在函数外面直接调用fn();fn()中的函数执行一遍
2、函数之间也可以调用
function fn1(){
console.log(111);
fn2();
}
function fn2(){
console.log(222);
}
fn1();//输出结果是111 222
复制代码
3、函数的事件调取
1.通过标签.onclick = 未执行的函数 (匿名函数)
2.通过行间的onclick属性 执行函数 ,注意需要小括号 (可以传参数)
<button id="btn" onclick="fn(1,2)">按钮</button>//
//第一种
btn.onclick = function(){
console.log("函数执行了");
}
//第二种
function fn(a,b){
console.log("fn",a,b);
}
// var fn = function(){
// console.log("fn");
// }
// btn.onclick = fn; //当点击按钮的时候执行 fn函数;
复制代码
三、定义函数的方式
1、声明型,函数的调用可以再定义之前 也可以在定义之后
函数定义方式一:命名函数(声明式)
function fn(){
console.log(1111);
}
复制代码
2、赋值型,赋值式函数的调用只能在函数定义之后调用,如果在函数定义之前调用那么就会报错
函数定义的第二种方式: 匿名函数(赋值式)
var fn = function(){
console.log(123);
}
复制代码
四、函数的参数
形参、实参、隐藏参数,参数可以写多个,并且是一一对应的关系
function fn(a){ //a是形参
console.log(a);
}
fn(1);//1是实参
复制代码
隐藏参数:
// 隐藏参数 : 处理不定参数问题 ;
function fn(){ //一个形参都不写
// 在 js函数里会提供一个隐藏参数 会把所有传入的参数当成伪数组(长的像数组,使用上有点区别 ,我们在这就可以简单理解成是数组)
// 隐藏参数是预定义的 arguments
console.log(arguments.length); //是隐藏参数
}
// fn函数调用的时候 实参 可以有2个参数传入 也可能有三个传入还有可能有很多个参数传入,
// fn(1);
fn(1,'hello');
fn(1,2,3);
fn(1,2,3,4,5);
// 总结:arguments 是隐藏参数 ,会把传入的实参放在伪数组里 ; 一般是处理不定参的问题
// 如果不是不定参的问题 不建议频繁使用arguments (可读性差)
复制代码
数组:
var array=[1,2,3]//1是该数组的第0个键值,2是第1位,3是第二位,
//3也可以用数组的长度减1获取
console.log(array.length);//获取数组长度
复制代码
数组的循环:
var array=[1,2,3];
for(i=0;i<array.length;i++){//从0开始循环,判断条件小于数组长度
console.log(array[i])
}
复制代码
字符串数组:
var str="abc123";
var newStr="";
var str0=str[0];
var strLast=str.length-1;
for(i=0;i<str.length;i++){
if(i!=0&&i!=str.length-1){
newStr+=str[i]
}
}
console.log("原来的字符串"+str);
console.log("新的字符串"+newStr);
复制代码
函数return的使用:
1.阻止函数中后续代码的执行(函数里return之后的代码没有任何意义) 2. 返还函数里的值
function fn(a){
console.log(a);
return a;//可以返回任何类型
}
fn(1);
复制代码
函数的优点:1. 封装 (把函数保存起来) 2.复用 3.延迟执行 ;
变量提升与函数提升:
1.变量提升只会提升变量名的声明,而不会提升变量的赋值初始化。
2.函数提升的优先级大于变量提升的优先级,即函数提升在变量提升之上。
console.log(a); // a 是啥? 1. undefined 2.报错
// 结果是 undefined 有点不符合逻辑
if(false){
var a = 10;
}
复制代码
五、函数的作用域:
全局作用域:自己定义的全局变量 js会把它放在 预定义的全局变量上,js里全局内置的变量是window
局部作用域(函数作用域) :一个函数包裹的区域 ,被称为函数作用域 ,也是局部作用域
var a=1;//全局作用域
function fn(){
var a=2;//局部作用域
console.log(a);
}
fn();//执行a=2;作用域从内到外
复制代码