JavaScript的相关知识点简单总结

JavaScript的相关知识点简单总结

为了更加合理的使用内存空间,针对不同的数据分配不同的空间

基本数据类型

1.Undefined :表示没有值,注意typeof(Undefined)的返回值 也是Undefined.可以将Undefined
赋值给任何变量或属性,但并不意味了清除了该变量,反而会因此多了一个属性。
2.Unll:没有值. 注意:typeof(Null)返回值是Object,具有Null值的变量也并非object.
3.Boolean:布尔类型,true or false ,真或假,既能被代码处理,也可以控制代码的流程.
4.Number:数字类型 ,便于代码进行批量处理,也控制代码的迭代和循环等。
注意:typeof(NaN)和typeof(Infinity)都返回number 。NaN参与任何数值计算的结构都是NaN,而且 NaN != NaN 。Infinity / Infinity = NaN
5.String:字符串类型

引用数据类型

1.Object 对象
2.Array 数组型
3.Funcation 函数型

可以通过typeof来查看变量名的数据类型
基本数据类型存储在栈中
引用数据类型存储在堆中

自定义函数的两种方法:

<script>
function f(){
     
     
}
</script>

调用时function会提前所以f()可在函数的前边或者后边

<script>
var fn = funcation(){
     
     
}
</script>

提前的时fn变量名,函数体不会提前,所以在调用时,要在函数的后边
函数的返回值:
1.当函数无明确返回值时,函数返回undefined
2.有返回值时正常返回相应内容

JavaScript本身不支持函数重载:如果两个函数名字一样,即使函数体内容不一样,后面定义的也会覆盖在前面定义的,调用时也是调用后边的。

<script>
function f(){
     
     
console.log(a)
}
function f(){
     
     
console.log(b)
}//名字一样后边会覆盖前边
</script>

JavaScript在执行代码时分两个阶段
1.预编译

1.把加var 的变量进行提升,但变量的赋值不会,提升到代码段的最前端
2.把使用function声明的函数进行提升(提升的是函数体) 例外:当函数重复命名时只是提升函数体,当函数出现在判断条件中提升函数名不提函数体

<script>
var a = 1 ;//定义变量 此内容可挂载在全局执行上下文中和全局对象里边(window)
if ("a" in window)//判断a是否在window里,显然存在 则此内容为true 继续执行if语句中的内容
{
     
     
	function f(){
     
     
	console.log(a);//输出1
	}
	f()
}
</script>

2.代码执行:从上到下依次执行

闭包

一个不能被释放的栈空间,可以读取其他函数内部变量的函数
由于在JavaScript语言中,只有函数的内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在函数内部的函数”。
用途:
1.获取函数内部的局部变量
2.让这些变量始终保持在内存中
注意
由于闭包会使得函数中的变量一直保存在内存中,所以不能滥用闭包,容易导致内存泄漏,影响网页性能。

<script>
var i = 0 ;
function A(){
     
     
	var i = 10;//10给i赋值
	function x(){
     
     
		console.log(i);
	}
	return x;
}
var y = A();//执行A 返回x 所对应函数的地址给y 此时对应i的值是10
y();//进入y所对应的地址(函数体)显示出i的值为10,因为闭包导致i的值依然存在为10
function B(){
     
     
	var i = 20 ;
	y();//此时调用函数用到的i的值为函数定义处i的值
}
B();//10
</script>

JavaScript数据类型转化:(运算符两侧需要数据类型一致,若不一致JS解释器会自行转化)
1.隐式类型转化:默默的自己转化 0、-0、" " 、undefined、null 以上会直接转成false

<script>
	var a = 1 ;
	function b(){
     
     
		if(!a){
     
     //判断的时候a没有值所以是undefined,取反为真,所以继续执行代码
			var a = 2 ;//预提升a的变量名
		}
		console.log(a);//2
	}
	b();
</script>

2.强制转化类型:parseInt…

let、const共同特点:

1.声明的变量不提升
2.配合{}使用可以形成块级作用域
3.声明的变量不会挂载到window全局对象上边
4.不能重复声明

声明变量使用let,声明常量使用const(声明时必须赋值)

代码运行存储的方式

猜你喜欢

转载自blog.csdn.net/Fairyasd/article/details/107417144