高级函数
1:基本类型和引用类型?
基本:number string boolean null undefined
var a=1;
引用: object,函数
var arr=[];
function fun(){
}
2:基本类型和引用类型的区别?
基本类型是值的传递,引用类型是地址的传递。
3:js的内存方式?
当在js中写完一句js代码的时候,js会自动开辟内存空间。
内存分为2种:
栈内存:
存储的是基本类型
堆内存:
存储的是引用类型
4:js执行代码的过程。
1:首先要进行预解析
预解析,解析的是js中的关键字 var 和 function。
会把关键字提前。
变量的预解析:
先声明,后定义。
函数的预解析:
声明和定义同时执行。
5:函数内部的属性:
函数的属性分为3种:this,arguments,prototype
this的功能:
this的功能具有指向性!
分析this的指向功能:
1:如果在绑定事件函数中,this指向事件前对象。
举例:
btn.onclick=function(){
alert(this)
}
2:在其他函数中,谁调用这个函数,this就指向谁!
6:匿名函数:
自己自我调用的函数就是匿名函数,函数没有命名也是匿名函数
举例:
()()
var a=function(){}
// 匿名函数写法1:
// var a=function(){
//
// }
// 匿名函数写法2:
// (function aa(){
// alert(12312)
// })()
// (function aa(a,b){
// alert(a+b)
// })('老栗好帅','臭不要懒得')
// 匿名函数写法3:
// ~(function aa(){
// alert('饿了')
// })()
// ~function aa(){
// alert('饿了')
// }()
// 匿名函数写法4:
// -function aa(){
// alert('饿了吗')
// }()
// +function aa(){
// alert('饿了吗了')
// }()
// !function aa(){
// alert('饿了吗了好')
// }()
匿名函数的优点:
1:减少函数命名,节省代码和内存空间
2:防止函数命名冲突
3:内部变量不容易被获取。
匿名函数的缺点:
1:内部变量不容易被获取。
7:全局变量和局部变量,全局作用域和局部作用域
全局变量:
函数外有关键字 var声明的变量
window对象下声明的属性
不加关键字var 的变量
全局变量作用域全局window下,只能下面的代码获取。
局部变量:
在函数中加var关键字的变量或函数的形参,对象的属性都是局部变量。
全局作用域:
变量声明在windon下,所有作用于全局。
局部作用域:
变量是私有的,作用当前的函数或对象内部。
8:作用域链
创建好一个函数时,会自动生成一个链条,函数中查找某个属性时,
第一链条有这个属性或者变量,就会直接执行找到,没有就会向上查找,直到找到,
全局也找不到,就会抛出异常(报错),这个过程就是作用域链!
<script type="text/javascript">
var color='red';
function sum(){
function sun(){
alert(1)
}
function son(){
alert(2)
}
sun();
son();
}
sum()
// 它会从链的第一个对象开始查找,
// 如果这个对象有一个名为 x 的属性,
// 则 会直接使用这个属性的值,
</script>
9:闭包函数
1:闭包就是能够读取其他函数内部变量的函数。
这种写法就可以获取到函数内部的局部变量,b函数就是闭包
function a(){
var n=9;
function b(){
alert(n)
}
return b;
}
var num=a();
num();
2:闭包的用途
闭包可以用在许多地方。
它的最大用处有两个,一个是前面提到的可以读取函数内部的 变量,
另一个就是让这些变量的值始终保持在内存中。
3:闭包的缺点:
使用闭包的注意点 由于闭包会使得函数中的变量都被保存在内存中,
内存消耗很大,所以不能滥用闭包,
否则会造成网页的性能问题,
在 IE 中可能导致内存泄露。
解决方法是,在退出函数之前,
将不使用的局部变量全部删除。
闭包会在父函数外部,改变父函数内部变量的值。
所以,如 果你把父函数当作对象(object)使用,
把闭包当作它的公用方法(Public Method),
把 内部变量当作它的私有属性(private value),
这时一定要小心,不要随便改变父函数内 部变量的值。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
// function a(){
// var n=9;
// function b(){
// alert(n)
// }
// return b;
// }
// var num=a();
// num();
//
// function a(){
// return '哈哈';
// }
// var b=a;
// alert(b())
//
// function a(){
// return '哈哈';
// }
// var b=a();
// alert(b)
// function a(){
// function b(){
// alert(3)
// }
// return b;
// }
// var nn=a();
// nn();
// function f1(){
// var n=9;
// add=function(){
// n+=1;
// }
// function f2(){
// alert(n);//10
// }
// return f2;
// }
// var reslut=f1();
// add();
// reslut();//10
// add();
// reslut();//11
function sun(){
function son(){
alert(3)
}
return son;
}
sun();
</script>
</body>
</html>
10:垃圾回收机制
垃圾回收机制,就是变量释放自己内存空间的过程。
局部变量的释放是当函数执行完成一次以后,就会释放自己的内存空间,
全局变量的释放就是关闭浏览器后,会释放自己的内存空间。
<script type="text/javascript">
var a=3;
function sum(){
var b=4;
alert(b);
alert(a);
}
sum();
</script>