使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值)
但是如果声明变量时不使用var关键字则变量声明不会被提前
console.log("a="+a); //undefind(若去掉var报错)
var a = 123;
使用函数声明形式创建的函数 function 函数名 (){}
它会在所有代码执行之前就被创建,所以我们可以在声明前调用
使用函数表达式创建的函数不会被提前声明,不会提前创建 var fun2 = function(){}
在函数作用域也有声明提前的特性
调用函数时创建,函数执行完毕以后,函数作用域销毁
每调用一次就会创建一个新的函数作用域,他们之间是互相独立的
在函数中要访问全局变量可以使用window
var a = 10
function fun () {
var a = "fun中的"
console.log(window.a)
}
使用var声明的变量,在方法内部是局部变量,在方法外部是全局变量;
不使用var声明的变量都是全局变量,但如果是在方法内部声明,在方法外部使用之前需要先调用方法,告知系统声明了全局变量后方可在方法外部使用。
根据函数调用的方式不同,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
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就是普通的函数,加了就是构造函数
1.当以函数的形式调用时,this是window
2.当以方法的形式调用时,this是调用它的东西
3.当以构造函数形式调用时,this就是新创建的那个对象
4.使用call和apply调用时,this是指定的那个对象
在js中有自动垃圾回收机制,会自动将这些垃圾对象从内存中销毁
我们需要做的是将不再使用的对象设置为null即可
(1)var arr = new Array();
(2)使用字面量来创建数组
var arr = [ ];