js的匿名函数
(function(){alert("this is anymouns ")})
不加括弧会报错的。用这种方式是想不去创建函数对象,要不然会亏的慌。
立即执行函数,在上面的后面加();往往只能执行一次,这个东西没有变量保存它。不仅能调还能传参数。
(function(a,b){console.log("a="+a);
cosole.log("b="+b);})(123,456);
js中的for in 语句计算
for (var n in obj)
{console.log("hello");
console.log(obj[n]);
}
//第二个方式才能取出对象里边属性的值。n是一个变量。
作用域
作用域指一个变量作用的范围
在js中一共有两种作用域,
1.全局作用域
2.函数作用域
全局作用域在页面打开时创建,在页面关闭时销毁。
在全局作用域中,有个全局对象window,它代表浏览器窗口。
在全局作用域中;创建的变量都会作为window对象 的属性保存。创建的方法作为函数的方法保存。
声明提前
变量的声明提前。
使用var关键字声明的变量会在所有代码的执行之前被声明。(但是不会赋值),但是如果声明变量时不使用var关键字,则变量不会被声明提前。
函数的声明提前,使用函数声明形式创建的函数function函数(){}
它会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数,使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用。
function
函数作用域
调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁。每调用一次函数就会创建一个新的函数作用域,他们之间是互相独立的。在函数作用域中可以访问到全局作用域的变量。在全局作用域中无法访问到函数作用域的变量。
当在函数作用域操作一个变量时,它会在自身作用域中寻找,如果有就直接使用,如果没有则向上一级作用域中寻找。
this
解析器在调用函数每次多会向函数内部传递进一个隐含的参数,这个隐含的参数就是this.这个对象我们称为函数执行的上下文对象。
1.以函数形式调用时,this永远是window
2.以方法调用时,this就是方法调用的对象。
JS的构造函数
构造函数一般首字母大写,加new是构造函数。
function Person(){
}
var per=new Person();
JS的构造函数原型对象
将对象共用属性和方法,统一添加到构造函数的原型对象中。这样不用分别为每一个对象添加,也不会影响全局作用域。
function Myclass(){}
Myclass.prototype.name="我是原型中的名字";
var mc=new MyClass();
console.log(mc.name);
原型对象也是对象,所以它也有原型
当我们使用一个对象的属性或方法时,会先在自身中寻找,
自身中如果有,则直接使用
如果没有则去原型对象中寻找,如果原型对象中有,则使用。
如果没有则去原型的原型中寻找。直到object对象的原型,
object对象的原型没有原型,如果在object中依然没有找到,则返回undefined。
JS的垃圾回收
我们好像是不能自己手动回收的,我们只能将不再使用的对象作为null.
var obj=new Object();
obj=null;
JS数组也是一个对象
var arr=new Array();