引用对象—函数

松耦合:函数尽量不要有关系 是功能的拼接
函数:封装一次可以执行任意多次,任意时间的js代码
命名格式与变量名一致(变量名一般为名词 函数名为动词)
函数名和变量名不能重复 函数名不能重复
函数需要被调用 才能 执行;
函数定义与调用顺序可以调换(匿名函数须按顺序执行);函数执行完立即关闭;不与下面的代 码产生关系
格式
格式一(无参函数
function 函数名(){ 函数体 } 函数名();//调用
格式二(带有参数的函数)
function 函数名(变量名字,变量名字,变量名字){带有变量的函数体/代码块 }
函数名(变量名,变量名,变量名)//理论上可以无上限 省略 var 参数定义是 形参 使用时 实参
格式三 匿名函数
function(){函数体 }
Var a=function(){函数体}
· console.log(a) // 执行匿名函数第一种方法
· (function(){})(); // 匿名函数的自我执行
· (function (参数){}(参数)) //带有参数的执行
格式四 带有返回值的参数
Function show(){函数体
return}
return需要接收 不接收不能输出 调用谁接收
格式五 回调函数 将函数当作参数传入函数接受值中
Function show(fn){ 函数体}
show(一个函数)
show(function(){console.log(‘hi’);});
闭包
有权在函数内访问另一个函数作用域中的变量,并且将该函数返回
案例
function show(){
var num=10;
console.log(‘run’);
return function(){
console.log(num);
};
}
// var fn=show();
// fn();
show()();//show执行完返回一个函数 然后让函数自我执行
案例
var arr = [];
for (var i = 0; i < 3; i++) {
arr[i] = function() {
console.log(i);
};
}
console.log(i);//输出3
原因:按照顺序结构 先执行for循环 在输出i的值 arr未被调用 不能输出0 1 2
修改
var arr = []; //定义arr是一个数组
for (var i = 0; i < 3; i++) {
arr[i] = (function(a) { //函数赋予数组内
return function() { //返回一个新的函数
console.log(a); //新函数的函数体
};
})(i); //执行匿名函数 并得到返回值函数(赋值之后也可以直接用()调用 赋给一个变量后 可以用变量名()调用)
}
console.log(arr); //查看arr数组内容 得到三个返回的函数
for (var j in arr) { //循环得到arr 索引
arrj; //3 //执行arr[0~arr.length-1]的函数
}
querySelectorAll(‘div’)寻找所有的div标签 可以加索引 ie不支持
querySelector(‘div’)寻找第一个div
arguments:能够被接受的参数 无论接没接到 常用于字符拼接
5 函数的作用域
js中没有块级作用域 有局部和全局变量之分 function内定义的变量是局部变量
建议:优先使用局部变量,因为全局变量生命周期更长(和页面的生命周期一致),占用内存时间较长,
局部变量使用完毕就可以等待回收,更加合理
· 临近原则 按照顺序结构使用离自己最近的变量 一般会局部变量覆盖全局变量
var a = 20; //全局变量
//局部变量
function show(a) {
console.log(a); //就近原则 100
a = 30;//30
console.log(a);//30
}
show(100);
console.log(a); //20
· 函数执行完会直接关闭 不与下面的代码发生关系
原函数
var a = 20;
function show() {
if (a == 20) {
var b=‘hello’;
b = ‘hello’;
} else {
var a=10;
}
console.log(b);
console.log(a);
}
show();
console.log(a);
执行
var a = 20;
function show() {
var a, b; //变量提升
if (a == 20) {
// var b=‘hello’;
b = ‘hello’;
} else {
// var a=10;
a = 10; //局部变量
}
console.log(b);
console.log(a);
}
show();
console.log(a); //全局变量
· 局部变量上升为全局变量
var a = 5; //全局变量
function show() {
a = 20; //全局变量 没有使用var
console.log(a);
}
show(); //20
console.log(a); //20
· 变量提升

if (true) {
var a = 10; //全局变量
console.log(a);
console.log(b); //undefined
} else {
var b = 20; //全局变量
}
console.log(‘out:’, a);
console.log(‘out:’, b);
等价于
var a,b; //变量提升只会提升变量 值不会跟着提升
if(true){
a=10;
console.log(a);
console.log(b);//undefined
}else{
b=20;
}
· 函数被赋值后,要按顺序结构执行
a(); //TypeError: a is not a function
var a = function() {
document.write(‘hello world’);
};
a();//hello world
· 高阶函数
setInterval(function(){
console.log(‘hello everyone !’);
},1000);
将函数放入计时器中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值