js基础知识整理(二)

1.变量的声明提前

使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值)

但是如果声明变量时不使用var关键字则变量声明不会被提前

console.log("a="+a);      //undefind(若去掉var报错)

var a = 123;

2.函数的声明提前

使用函数声明形式创建的函数             function 函数名 (){}

它会在所有代码执行之前就被创建,所以我们可以在声明前调用

使用函数表达式创建的函数不会被提前声明,不会提前创建       var fun2 = function(){}

3.函数作用域

在函数作用域也有声明提前的特性

调用函数时创建,函数执行完毕以后,函数作用域销毁

每调用一次就会创建一个新的函数作用域,他们之间是互相独立的

4.全局变量

在函数中要访问全局变量可以使用window

var a = 10

function fun () {

    var a = "fun中的"

   console.log(window.a)

}

使用var声明的变量,在方法内部是局部变量,在方法外部是全局变量;

不使用var声明的变量都是全局变量,但如果是在方法内部声明,在方法外部使用之前需要先调用方法,告知系统声明了全局变量后方可在方法外部使用。

5.this

根据函数调用的方式不同,this会指向不同的对象

1.以函数的形式调用时,this永远都是window

function fun (){

    console.log(this)

}

fun()

2.以方法的形式调用时,this就是调用方法的那个对象。

var obj = {

name:"孙悟空",

sayname:fun

}

obj.sayname();

构造函数与普通函数的区别就是首字母是大写的

function Person(){}

其次就是二者的调用方式不同,普通函数是直接调用,而构造函数需要使用new关键字来调用

var per = Person();  普通函数调用

var per  new Person();  构造函数调用

console.log(per)  普通函数调用是undefind

构造函数调用是object

6.构造函数的执行流程

1.立刻创建一个新的对象

2.将新建的对象设置为函数中的this,在构造函数中可以使用this来引用新建的对象

3.逐行执行函数的代码

4.将新建的对象作为返回值返回

使用同一构造函数创建的对象称为一类对象

使用instance of可以检查一个对象是否是一个类的实例

语法:对象instanceof  构造函数

function Person (name,age,gender){

  this.name = name;

  this.age = age;

  this.gender = gender;

}

var per = new person ("孙悟空",18,“男”)

不加new就是普通的函数,加了就是构造函数

7.this的情况

1.当以函数的形式调用时,this是window

2.当以方法的形式调用时,this是调用它的东西

3.当以构造函数形式调用时,this就是新创建的那个对象

4.使用call和apply调用时,this是指定的那个对象

8.垃圾回收

在js中有自动垃圾回收机制,会自动将这些垃圾对象从内存中销毁

我们需要做的是将不再使用的对象设置为null即可

(1)var arr = new Array();

(2)使用字面量来创建数组

var arr = [ ];

 

你可能感兴趣的:(js)