script标签属性
type
src
sync
async 异步执行, script标签下载完就执行
defer 异步执行,html标签加载完才执行
/**
*这种注释方式可以放在方法前,会自动填充方法中的参数名等信息
*/
字符串
不可变
当一个字符串重新赋值以后,原内存空间的地址不会发生变化,要想重新赋值,就会重新分配一个内存空间,会造成内存的大量浪费。
Boolean
何时为false:
空字符串、0、NaN、null、undefined
函数
调用函数时,会把函数的实参复制一份传递给函数的形参,改变形参的值不会改变实参。
函数和方法的区别:
函数:直接调用的是函数 alert()
方法:通过对象调用的是方法 girl.getName()
构造函数
new后面调用的函数,构造函数本质就是一个函数,只不过构造函数的目的是为了创建新对象,为新对象进行初始化。
1. 内存开辟空间,存储新创建的对象
2. 会把this设置为当前对象
3. 执行函数内部的代码,设置对象的属性和方法
4. 返回新创建的对象
函数提升
js会把当前作用域的函数声明提前到整个作用域的最前边。
自调用函数
只能执行一次
作用域
变量的作用域:变量在什么位置可以使用
全局作用域:在任何位置都可以访问
局部作用域:在函数内部声明一个变量,只能在该函数内部使用
不使用var声明的变量是全局变量
当变量超出作用域之后,变量会被销毁;
js中没有块级作用域;
在其他语言中,在代码块中定义的变量,外部是访问不到的,但是在js中没有块级作用域
eg:
if(true){
var name = ‘abc’
}
console.log(name)
变量提升
定义变量的时候,变量的声明会被提升到作用域的最上方,变量的赋值不会提升。
对象
无序属性的集合,可以把对象看成键值对
引用对象的属性两种方法
o.name = ‘888’
o[“name”] = ‘888’
基本数据类型和引用数据类型
基本数据类型
number string Boolean undefined null
在栈中分配一块内存空间用来存储数据
var a = 10;
var b = a;
a = 11;
console.log(a)
console.log(b)
输出结果为11 10
在栈中分别分配了两块地址用来存储a和b的数据
引用数据类型
object array dete 函数
在栈中分配一块内存空间用来存储堆中的地址,在堆中分配一快内存空间用来存储数据
var s1 = new Student();
var s2 = s1;
在堆里面分配了一份内存空间用来存储对象s1,栈里边分配了一份内存空间用来存储s1在堆中的地址,在栈里面复制了一份s1的地址给s2,此时s1和s2指向的堆中的对象是同一个。
值类型和引用类型在内存中的存储方式
值类型按值存储
引用类型按引用存储
值类型复制和应用类型复制
值类型按值复制
引用类型按引用复制
值类型和引用类型参数传递
值类型按值传递
引用类型按引用传递
值类型和引用类型的差别
基本类型在内存中占据固定大小的空间,因此被保存在栈内存中;
从一个变量向另一个变量复制基本类型的值,复制的是值的副本;
引用类型的值是对象,保存在堆内存中;
包含引用类型的变量实际上包含的并不是对象本身,而是一个指向该对象的指针;
从一个变量向另一个变量复制引用类型的值的时候,复制的是引用指针,因此两个变量最终都指向同一个对象。