闭包
Function fn1(){
Let a=1;
Function fn2(){
Document,write(a);}
Return fn2;}
Fn1()()
通过这个方式,就可以得到fn1的局部变量a的值
因为如果直接打印fn(1)会发现返回的是一个函数 document.write(a)那么既然是函数,就可以在后面加一个()来接收
过度的占用内存,产生内存消耗,导致性能变差
闭包产生的原因,一个函数内部的变量被另一个函数b引用,导致函数a执行一遍之后,里面的变量不能被销毁。导致变量一直存在于内存之中,所以函数a 的变量可以被改变。
变量提升
当下面使用var时,会出现变量提升的情况
Var a=>a=undefined(已经声明, 还是还没赋值。给了一个初始值叫undefined)
Var a=123
Let 不存在变量提升,不能在还没有初始化的时候使用变量,否则报错
Let 不能重复定义
函数是js中的一等公民
声明了function 会提升函数到最前面。页面加载的时候会先找有没有var和function如果发现有var就会把变量预定义为underfinded.如果发现有function,就会把它放最前面
常用的系统函数
Let num=12.12
12.12会被取整为12
Let num2=parseInt(num)
Console.log(num2)
把这个字符串‘12.12’转成浮点数12.12
Let num2=parseFloat(num)
Console.log(num2)
会把12.20转成12.2后面的0会去掉
Let str2=parseFloat(12.20)
Console.log(str2)
NaN not a number 表示不是一个数字
Console.log(isNaN(‘abc’-123))使用isNaN方法来判断是不是一个数字,如果不是一个数字就返回true
Function fn(){
A=1;如果在函数内部不用let或var定义,那么a就默认是全局变量。使用了var或者let就只能在函数内部使用它}
使用了return后函数会停止执行,下面的东西就不执行了
匿名函数自执行
Let src(function(){
Let a=prompt(‘输入第一个数字’);
Let b=pormpt(‘输入第二个数字’);
If(a>b){
Return ‘第一个数大’}
Else if(b>a){return ‘第二个数大’}
})
()alert(src)