美文网首页
JS-ECMAScript

JS-ECMAScript

作者: 哎呦呦胖子斌 | 来源:发表于2018-10-18 16:57 被阅读0次
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指向的堆中的对象是同一个。

值类型和引用类型在内存中的存储方式

值类型按值存储

引用类型按引用存储

值类型复制和应用类型复制

值类型按值复制

引用类型按引用复制

值类型和引用类型参数传递

值类型按值传递

引用类型按引用传递

值类型和引用类型的差别

基本类型在内存中占据固定大小的空间,因此被保存在栈内存中;

从一个变量向另一个变量复制基本类型的值,复制的是值的副本;

引用类型的值是对象,保存在堆内存中;

包含引用类型的变量实际上包含的并不是对象本身,而是一个指向该对象的指针;

从一个变量向另一个变量复制引用类型的值的时候,复制的是引用指针,因此两个变量最终都指向同一个对象。

相关文章

  • JS-ECMAScript

    script标签属性 type src sync async 异步执行, script标签下载完就执行 defer...

网友评论

      本文标题:JS-ECMAScript

      本文链接:https://www.haomeiwen.com/subject/spsszftx.html