js

自闭症网瘾萝莉.ら 提交于 2019-12-04 04:34:01
  1. 存储(变量)

Js中变量是存在栈内存

Js中的内存分两种 栈内存  堆内存

栈内存 就是存放变量的

堆内存 就是存代码块 object function

Js特殊在它是一个弱类型语言:

定义变量的时候没有明确指明它的数据类型,而是有后面赋的值决定它的类型

Var a=”” var a=12; var a=[];var a={}

Java是强类型语言

定义变量的时候就指明它的数据类型,后面的赋值就不能随便赋值了,必须和数据类型保持一致。

String a=”123”; number a=12; Boolean a=true;

Js内存存放机制

  1. 基本数据类型:string number Boolean undefined null 

如果变量后面的值是基本数据,就直接存在栈内存中。栈里面要求变量不能重名,如果重名后者就会覆盖前者。

  1. 引用数据类型:object array function

如果变量后面是引用数据类型,将后面的代码块存在堆内存中,然后将堆内存中的内存地址赋值给前面的变量。

 

备注:

浏览器在执行js代码前,找出所有的关键字var function 将定义的变量存在内存中,存放完毕之后按照自上向下的顺序一步一步执行,当使用某个变量的时候(console.log(xxx),就会向内存查找,有就直接使用,没有就xxx is not defined,如果是赋值,就相当于给window添加了一个属性且赋值。a=45

作用域

1.浏览器在执行js代码的时候,会给js代码分配一个全局对象叫window,对应的这个全局空间就叫全局作用域。

2.私有作用域

函数再执行的时候,会开辟一个私有空间,叫私有作用域。在私有空间下,分配一个内存模块和一个执行模块。内存模块先找出所有的varfunction 把变量存进去,执行模块由上到下逐行执行,再操作变量的时候,先向自己的私有作用域下查找是否有这个变量,有就看赋值了没有,赋值了就直接使用,没赋值就是undefined。如果没有这个变量,就向该私有作用域的父级作用域查找,有就使用(看赋值了没有,赋值了就直接使用,没有就是undefined),如果没有就向父级的父级查找,以此类推直到window,如果window下没有就报错 xxx is not defined如果有看赋值了没有,赋值了直接使用,没赋值就是undefined

这种查找机制就叫作用域链

 

变量提升

作用域链查找过程中,看一个变量是否在该作用域下存在,存在看赋值了没有,赋值了直接使用,没有赋值就是undefined。这种功能就是变量提升。

函数归属问题

函数归属于哪一个作用域,跟它在哪个作用域下定义有关,跟它在哪个作用域下执行无关。

 

函数参数问题

Function fn(a);定义函数,如果函数带形参,就相对于在内存中存储了一个变量a

 

函数调用时:先开辟一个私有空间,先把形参存到内存中,如果带实参,给这个变量赋值,如果没带就是undefined,然后再找出代码块中的所有varfunction,然后代码从上到下一次执行。

形参带默认值,先把形参和值一起存到内存中,带实参调用,就相当于把值进行覆盖。

备注 window不是js所有的,而是浏览器的一个对象

赋值运算(从右往左就相当于给变量存东西 var a=2var b=[12,56]

== 才是真正的等号

=== 恒等于 即判断数据类型,还判断值 a=3;b=”3” a===b;

Var fn=function(){}function fn()定义函数是不一样的。

  1. 销毁内存

浏览器没经一段时间,自动去检测js中没有用的内存,把它销毁掉。

Js中的认为销毁变量  给这个变量赋值为null   a=nullnull的本质是空指针

内存销毁的顺序是:先存后销

-------------------------

什么叫内存泄漏?

没有用到的内存,没有及时释放,叫内存泄漏。

典型泄漏的例子

  1. for循环

 

  1. 函数返回的是一个引用数据类型 代表就是闭包

 

 

内存释放?

就是内存销毁。让栈和堆之间的指向断开就叫内存销毁。

函数调用:

每个函数都有一个返回值,如果人为return了,返回的是什么就是什么,没有return默认是undefined

Var function

  1. 都是定义变量。
  2. Var再内存中是只声明没定义。Function再内存中是即声明又定义了。

Var只声明了没定义,所以不能再没有定义前就使用否则是undefinedfunction是既定义又声明了,所以调用函数和定义函数顺序没关系。

Var fn=function function fn

前者是只声明了但没定义,后者是即声明了也定义了。

For

1.1100之间的质数?质数:只能被1和本身整除的数是质数,最少质数是2.

for(var i=1;i<=100;i++){

// 逻辑 i除以2...i

for(var j=2;j<=i;j++){

if(i%j==0&&j!=i){

// 这个条件是除尽了就break

break;

}else if(i==j){

// 重复太多保留最后一个

// 都除不尽说名是质数

document.write(i+"")

}

}

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!